2017-04-18 163 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过滤器。想法? –