python-3.x - 如何从形状张量 (?,1152,8) 中可视化图像?
问题描述
我正在尝试可视化胶囊网络层。以下是图层:
conv_layer1=tflearn.layers.conv.conv_2d(input_layer, nb_filter=256, filter_size=9, strides=[1,1,1,1],
padding='same', activation='relu', regularizer="L2", name='conv_layer_1')
conv_layer2=tflearn.layers.conv.conv_2d(conv_layer1, nb_filter=256, filter_size=9, strides=[1,2,2,1],
padding='same', activation='relu', regularizer="L2", name='conv_layer_2')
conv_layer3=tf.reshape(conv_layer2,[-1,1152,8], name='conv_layer3')
每一层的形状如下:
layer_1: (?, 50, 50, 256)
layer_2: (?, 25, 25, 256)
layer_3: (?, 1152, 8)
在这里,我可以用随机训练图像可视化前两层。可视化代码如下:
image = X_train[1]
test = tf.Session()
init = tf.global_variables_initializer()
test.run(init) #(tf.global_variables_initializer())
filteredImage = test.run(conv_layer3, feed_dict{x:image.reshape(1,50,50,3)})
for i in range(64):
plt.imshow(filteredImage[:,:,:,i].reshape(-1,25))
plt.title('filter{}'.format(i))
plt.show()
在这里,为了可视化第三层,我收到以下错误:
InvalidArgumentError: Input to reshape is a tensor with 160000 values, but the requested shape requires a multiple of 9216
[[node conv_layer3_9 (defined at <ipython-input-36-fd98b9e18bda>:20) = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](conv_layer_2_11/Relu, conv_layer3_9/shape)]]
如何克服这一点并可视化第 3 层?
解决方案
问题出在您定义第三层的行上。该层conv_layer3=tf.reshape(conv_layer2,[-1,1152,8], name='conv_layer3')
的输入conv_layer2
具有 ?,25x25x256
给出160000
错误值的形状,并且您希望将其重塑为?, 1152x8
给出9216
. 为了使重塑起作用,第一个应该是第二个的倍数。
推荐阅读
- http - Microsoft AD 应用程序验证失败:“microsoft-identity-association.json 的内容长度未设置或无效”
- python - Python:通过添加累积股息并取复合年增长率(CAGR)来计算总回报
- python - 四张表之间的SQL查询
- ios - 未定义符号:_OBJC_CLASS_$_FBSDKBasicUtility
- c# - 使用不同类型的节点从 JSON 创建类
- c# - 无法连接到 Linux 计算机上的 GRPC 服务
- apache-kafka - Kafka 增加处理超时消息
- javascript - 在 PaperJS 中查找闭合路径(多边形)的质心
- ios - 如何在 SwiftUI 中将变量从一个视图传递到另一个视图
- php - 连续运行多个(500 多个)cURL 命令的正确方法是什么?