在tf.layers.conv2d中可视化过滤器权重

时间:2017-04-18 19:17:40

标签: tensorflow

我在TensorFlow V1.0中使用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提取过滤器权重并将其可视化?

2 个答案:

答案 0 :(得分:9)

我设法使用以下

获得权重
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]

希望它有所帮助。

答案 1 :(得分:1)

我建议在tf.contrib.keras.layers.Conv2D中使用基于类的图层API,它将变量公开为图层对象的成员。

另外,请确保您在训练模型的同一会话中获取变量,否则您将获得未初始化的变量错误。

相关问题