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

Posted

技术标签:

【中文标题】Tensorflow - 可视化预训练网络的学习过滤器【英文标题】:Tensorflow - Visualizing learned filters of a pretrained network 【发布时间】:2018-12-13 20:00:30 【问题描述】:

我目前正在尝试使用 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”,以此类推,与默认的MNIST网络结构基本相同,只是使用了sigmoid函数。

我不知道如何实现这一点 - 我考虑过获取权重和偏差,并根据步幅和过滤器大小重新计算每一层,但我已经无法获取权重,我认为有一个更简单的解决方案。

【问题讨论】:

欢迎来到 Stack Overflow!这个问题做得很好 - 很高兴看到第一次提问的人提出如此精巧的问题。 :-) 【参考方案1】:

我目前正在尝试使用 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))

【讨论】:

谢谢,但是我可以在哪里/如何导入我的模型本身,以及经过训练的权重?在使用我的网络时,我通常使用estim = tf.estimator.Estimator(model_fn=model..., model_dir="...")这一行,然后再指定我想要预测的东西,例如 很抱歉再次询问,但我不知道如何进一步使用 tf.summary.image。我将你的第二个代码块添加到我的模型中,它终止时没有错误,但我不知道如何从这些张量中获取任何东西,谷歌也无法帮助我。感谢您的耐心等待 您只需要使用例如以下命令运行张量板:tensorboard --logdir ./ 并转到图像选项卡。 我似乎没有图像选项卡,因为我可能必须将 summary.images 添加到作家或类似的东西,但同样,我无法实现任何发现问题的结果。 TensorFlow 仅显示标量、图形和投影仪。当我点击右侧下拉菜单中的“图像”时,它说没有图像,因为我可能忘记将它们写入事件文件,或者找不到我的事件文件。 Estimator 自动将任何摘要添加到事件文件中。您是否再次尝试训练?

以上是关于Tensorflow - 可视化预训练网络的学习过滤器的主要内容,如果未能解决你的问题,请参考以下文章

使用预训练 (Tensorflow) CNN 提取特征

如何在 TensorFlow 中微调预训练网络?

PyTorch 深度学习实战 |用 TensorFlow 训练神经网络

Tensorflow学习教程------tensorboard网络运行和可视化

TensorBoard: 可视化学习

学习TensorFlow,TensorBoard可视化网络结构和参数