Python 3.x 如何从形状张量(?,1152,8)可视化图像?

Python 3.x 如何从形状张量(?,1152,8)可视化图像?,python-3.x,tensorflow,Python 3.x,Tensorflow,我试图可视化胶囊网络层。以下是图层: 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

我试图可视化胶囊网络层。以下是图层:

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()
在这里,我可以用随机训练图像可视化前两层。可视化代码如下所示:

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)]]
InvalidArgumentError:重塑的输入是一个具有160000个值的张量,但请求的形状需要9216的倍数
[[node conv_layer3_9(定义为:20)=重塑[T=DT_FLOAT,Tshape=DT_INT32,_device=“/job:localhost/replica:0/task:0/device:CPU:0”](conv_layer2_11/Relu,conv_layer3_9/shape)]]

如何克服这一点并将第3层可视化?

问题在于定义第三层的位置。重塑(conv_layer2,[-11152,8],name='conv_layer3')此层的输入
conv_layer2
的形状是
?,25x25x256
给出了错误的
160000
值,您希望将其重塑为
?,1152x8
的形状,从而给出
9216
。因此,为了使整形有效,第一个整形应该是第二个整形的倍数

需要做哪些更改?@Anusamehta您可以更改层的尺寸,因此可以添加额外的卷积层。例如,如果第二层的尺寸为
?,6x6x256
,这将在不改变输出形状的情况下解决重塑问题。