2017-04-18 59 views
3

我在TensorFlow V1.0中使用tf.layers.conv2d進行卷積。可視化tf.layers.conv2d中的濾鏡權重

一個例子如下:

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') 

我再嘗試收集過濾器重量如下: -

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

然而儘管網絡是越來越訓練有素,我得到[]上評估l1weights在會議中。

如何提取濾波器權重並使用tf.summary.image將它們可視化?

+0

嘗試將tf.GraphKeys.WEIGHTS更改爲GraphKeys.TRAINABLE_VARIABLES – Steven

+0

我試過它沒有工作並給出相同的輸出'[]' – Ujjwal

+0

您是否解決了這個問題?我有確切的一個。 – LKM

回答

0

我推薦使用基於類的圖層API,在tf.contrib.keras.layers.Conv2D中公開變量作爲圖層對象的成員。

此外,請確保您在訓練模型的同一個會話中獲取變量,否則您將獲得未初始化的變量錯誤。

5

我設法權使用以下

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] 

希望它能幫助。

+0

這看起來不錯,但是我得到錯誤'tensorflow.python.framework.errors_impl.InvalidArgumentError:張量必須是4-D,最後暗淡1,3或4,而不是[3,3,1,64] \t [[Node:conv1_2 = ImageSummary [T = DT_FLOAT,bad_color = Tensor ,max_images = 3,_device =「/ job:localhost/replica:0/task:0/cpu:0「](conv1_2/tag,conv1/kernel/read)]]'在灰度圖像上使用64位3x3過濾器。想法? –