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

Ujj*_*wal 5 tensorflow

tf.layers.conv2d在TensorFlow V1.0中使用进行卷积.

一个例子如下:

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')
Run Code Online (Sandbox Code Playgroud)

然后我尝试按如下方式收集过滤器重量: -

l1weights = tf.get_collection(tf.GraphKeys.WEIGHTS, 'conv1')
Run Code Online (Sandbox Code Playgroud)

然而,虽然网络正在接受培训,但我还是会[]l1weights会话中进行评估.

如何提取滤镜权重并使用它来显示它们tf.summary.image

azm*_*ath 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]
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 那是因为tf.summary.image需要一个形式的张量[images,height,width,channel].您可以使用以下代码转置维度:`kernel_transposed = tf.transpose(kernel,[3,0,1,2])`然后在摘要中使用它.`tf.summary.image( '核心',kernel_transposed)` (2认同)

Ale*_*sos 0

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

还要确保您在训练模型的同一会话中获取变量,否则您将收到未初始化的变量错误。