Tensorflow-可视化预训练网络的学习过滤器

时间:2018-07-05 10:57:01

标签: python tensorflow neural-network visualization tensorboard

我目前正在尝试使用python中的tensorflow可视化CNN的学习过滤器。 我在训练一个新网络时发现许多版本可与mnist数据集一起使用,但无法将其应用于我的应用程序。 我使用自定义数据集训练了一个Estimator对象,该对象存储在磁盘上。该模型包含诸如

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

,并且只想对尺寸为(28,28,3)的单个图片进行可视化预测。 在tensorboard中,此层简称为“ conv2d”,其他层称为“ conv2d_2”,依此类推,除了使用sigmoid函数外,它的结构与默认MNIST网络基本相同。

我不知道该如何实现-我考虑过要获得权重和偏差,并就步幅和过滤器大小重新计算每一层,但是我已经无法获得权重了,我认为更简单的解决方案。

1 个答案:

答案 0 :(得分:3)

  

我目前正在尝试使用python中的tensorflow可视化我的CNN过滤器。

我认为您的意思是可视化特定层的激活?如果是这样,您只需要为想要的图像运行该层的张量,如下所示:

import matplotlib.pyplot as plt

# Model definition
...
conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.sigmoid)
...

# Getting activations
acts = sess.run(conv1, {input_layer: your_image})

# Visualizing every filters
for i in range(acts.shape[3]):
  plt.imshow(acts[:,:,:,i].squeeze())
  plt.show()

如果您使用的是Estimator,则可以使用model_fn中的tf.summary.image()直接可视化激活的演变:

# In model_fn
...
conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.sigmoid)
acts_filters = tf.unstack(conv1, axis=3)
for i, filter in enumerate(acts_filters):
    tf.summary.image('filter' + str(i), tf.expand_dims(filter, axis=3))