TensorFlow Conv2D维度不匹配报错求助:输入与滤波器维度不符
解决Conv2D维度不匹配问题
嗨,我来帮你搞定这个TensorFlow Conv2D的维度错误!咱们先拆解一下错误信息和你的代码问题:
错误根源
错误提示里明确说了:Dimensions must be equal, but are 1 and 2 for 'Conv2D',对应的输入形状是[2,2,2,1],滤波器(kernel)形状是[1,1,2,1]。
回忆一下Conv2D的核心维度规则:
- 输入形状:
[batch, in_height, in_width, in_channels]——你的输入input_batch是2个样本,每个样本是2x2的单通道(in_channels=1)特征图,这部分是对的。 - 滤波器形状:
[filter_height, filter_width, in_channels, out_channels]——这里第三个维度必须和输入的in_channels完全一致,因为每个滤波器要和输入的每一个通道做卷积运算,通道数不匹配就没法完成计算。
你的问题就出在这:输入的in_channels是1,但你的kernel第三个维度是2,两者不匹配,所以触发了维度错误。
修正方案
根据你的代码结构,我猜你可能是想定义一个1x1的滤波器,输出2个通道?那咱们调整kernel的结构,让它的in_channels和输入保持一致(也就是1),同时设置out_channels为2:
修正后的完整代码
#-*-coding:utf-8-* import tensorflow as tf input_batch = tf.constant([ [ [[0.0], [1.0]], [[2.0], [3.0]] ], [ [[2.0], [4.0]], [[6.0], [8.0]] ] ]) # 调整kernel结构:1x1大小,in_channels=1,out_channels=2 kernel = tf.constant([ [[[1.0, 2.0]]] ]) conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1, 1, 1, 1],padding='SAME') with tf.Session() as sess: result = sess.run(conv2d) print(result)
如果你确实需要kernel的in_channels为2
那你得同步修改输入的in_channels为2,比如把每个像素点改成包含2个通道的值:
input_batch = tf.constant([ [ [[0.0, 0.1], [1.0, 1.1]], [[2.0, 2.1], [3.0, 3.1]] ], [ [[2.0, 2.1], [4.0, 4.1]], [[6.0, 6.1], [8.0, 8.1]] ] ]) # 此时kernel的in_channels=2,和输入完美匹配 kernel = tf.constant([ [[[1.0], [2.0]]] ])
这样运行就不会再出现维度不匹配的问题啦!
内容的提问来源于stack exchange,提问作者Yuan Liao
相关产品推荐
相关产品推荐

