python - Tensorflow - 可视化预训练网络的学习过滤器
问题描述
我目前正在尝试使用 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 网络的结构基本相同。
我不知道如何实现这一点 - 我考虑过获取权重和偏差,并根据步幅和过滤器大小重新计算每一层,但我已经无法获取权重,我认为有一个更简单的解决方案。
解决方案
我目前正在尝试使用 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))
推荐阅读
- azure - 关于 Azure 负载均衡器/Azure 流量管理器的问题
- python - 我在 python 中添加了脚本路径,Pycharm 说目录中没有 python
- java - 如何为 Spring Data Cassandra 创建自定义转换?
- c# - 用户不能更改复选框的检查状态。C# - 窗体
- python - 熊猫用相似的组数据填充缺失的单元格
- python-3.x - BeautifulSoup4,我如何抓取它的类?
- php - Htaccess 第二个重写规则不适用于生产
- mysql - 对于另一个表中的特定 ID,查找表中具有最高序列号的行
- c# - 如何使用 LINQ 在特定值之后获取列表中的所有值
- swift - 为 watchOS 构建时 CoreTelephony 不可用 - 将手表应用程序目标添加到 ios 应用程序项目时