2017-04-18 4 views
3

Ich benutze tf.layers.conv2d in TensorFlow V1.0 Faltung zu tun.Visualisierung der Filtergewichte in tf.layers.conv2d

Ein Beispiel hierfür ist wie folgt:

conv1 = tf.layers.conv2d(batch_images, filters=96, 
            kernel_size=7, 
            strides=2, 
            activation=tf.nn.relu, 
            kernel_initializer=tf.contrib.layers.xavier_initializer_conv2d(uniform=False), 
            bias_initializer=tf.contrib.layers.xavier_initializer(uniform=False), 
            kernel_regularizer=tf.nn.l2_loss, 
            bias_regularizer=tf.nn.l2_loss, 
            name='conv1') 

ich dann versuchen, die Filtergewichte zu sammeln, wie folgt: -

l1weights = tf.get_collection(tf.GraphKeys.WEIGHTS, 'conv1') 

jedoch, obwohl das Netzwerk trainiert wird immer, ich [] auf l1weights Bewertung in einer Sitzung.

Wie extrahiere ich die Filtergewichte und visualisiere sie mit tf.summary.image?

+0

Versuchen Sie, tf.GraphKeys.WEIGHTS zu GraphKeys.TRAINABLE_VARIABLES zu ändern – Steven

+0

Ich habe versucht, es hat nicht funktioniert und gab die gleiche Ausgabe '[]' – Ujjwal

+0

Haben Sie das Problem lösen? Ich habe genau den richtigen. – LKM

Antwort

0

Ich empfehle die Verwendung der klassenbasierten Layer-API in tf.contrib.keras.layers.Conv2D, die die Variablen als Mitglieder des Layer-Objekts verfügbar macht.

Stellen Sie außerdem sicher, dass Sie die Variablen in derselben Sitzung abrufen, in der Sie das Modell trainiert haben, oder Sie erhalten nicht initialisierte Variablenfehler.

5

ich es geschafft, die Gewichte mit dem folgenden

conv1 = tf.layers.conv2d(
    inputs=input_layer, 
    filters=32, 
    kernel_size=[5, 5], 
    padding="same", 
    activation=tf.nn.relu, name='conv1') 

kernel = tf.get_collection(tf.GraphKeys.VARIABLES, 'conv1/kernel')[0] 
bias = tf.get_collection(tf.GraphKeys.VARIABLES, 'conv1/bias')[0] 

Hoffe, es hilft zu bekommen.

+0

Das sieht gut aus, aber ich bekomme den Fehler "tensorflow.python.framework.errors_impl.InvalidArgumentError: Tensor muss 4-D mit letzten Dim 1, 3 oder 4, nicht [3,3,1,64] sein \t [[Node: conv1_2 = Bildzusammenfassung [T = DT_FLOAT, bad_color = Tensor , max_images = 3, _device = "/ job: localhost/replik: 0/task: 0/cpu: 0 "] (conv1_2/tag, conv1/kernel/read)]]' using 64 '3x3' Filter auf einem Graustufenbild. Ideen? –