教程中的Tensorflow不兼容形状错误

教程中的Tensorflow不兼容形状错误,tensorflow,Tensorflow,我一直在尝试从中创建卷积网络,但遇到了麻烦。出于某种原因,我得到的错误是y_conv的大小比y_conv的大小大4倍,我不知道为什么。我发现了,但这似乎是一个不同于我的问题,虽然它看起来相似 需要说明的是,下面代码中的批大小是50,但它出现的错误是 tensorflow.python.framework.errors.InvalidArgumentError:不兼容的形状:[200]与[50] 当我将批量大小更改为10时,我得到 tensorflow.python.framework.error

我一直在尝试从中创建卷积网络,但遇到了麻烦。出于某种原因,我得到的错误是y_conv的大小比y_conv的大小大4倍,我不知道为什么。我发现了,但这似乎是一个不同于我的问题,虽然它看起来相似

需要说明的是,下面代码中的批大小是50,但它出现的错误是

tensorflow.python.framework.errors.InvalidArgumentError:不兼容的形状:[200]与[50]

当我将批量大小更改为10时,我得到

tensorflow.python.framework.errors.InvalidArgumentError:不兼容的形状:[40]与[10]

所以它和批量大小有一定的关系,但我不知道。有人能告诉我这个代码有什么问题吗?这几乎是直接从上面链接的教程

来自tensorflow.examples.tutorials.mnist导入输入数据
mnist=输入数据。读取数据集('mnist\U数据',one\U hot=真)
导入tensorflow作为tf
sess=tf.InteractiveSession()
def重量_变量(形状):
初始值=tf.截断的_法线(形状,标准差=0.1)
返回tf.变量(初始值)
def偏差_变量(形状):
初始=tf.常数(0.1,形状=形状)
返回tf.变量(初始值)
def conv2d(x,W):
返回tf.nn.conv2d(x,W,步长=[1,1,1,1],padding='SAME')
def max_pool_2x2(x):
返回tf.nn.max_pool(x,ksize=[1,2,2,1],步长=[1,2,2,1],padding='SAME')
x=tf.placeholder(“float”,shape=[None,784])
占位符(“float”,shape=[None,10])
w_conv1=权重_变量([5,5,1,32])
b_conv1=偏差_变量([32])
x_image=tf.重塑(x,[-1,28,28,1])
h_conv1=tf.nn.relu(conv2d(x_图像,w_conv1)+b_conv1)
h_池1=最大池2(h_池1)
w_conv2=权重_变量([5,5,32,64])
b_conv2=偏差_变量([64])
h_conv2=tf.nn.relu(conv2d(h_conv1,w_conv2)+b_conv2)
h_池2=最大池2×2(h_池2)
w_fc1=权重_变量([7*7*641024])
b_fc1=偏差_变量([1024])
h_pool2_flat=tf.重塑(h_pool2,[-1,7*7*64])
h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,w_fc1)+b_fc1)
keep_prob=tf.占位符(“float”)
h_fc1_drop=tf.nn.drop(h_fc1,keep_prob)
W_fc2=重量_变量([1024,10])
b_fc2=偏差_变量([10])
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_fc2)
交叉熵=-tf.reduce_和(y_*tf.log(tf.clip_by_值(y_conv,1e-10,1.0)))
列车步长=tf.列车AdamOptimizer(1e-4).最小化(交叉熵)
正确的预测=tf.equal(tf.argmax(y_conv,1),tf.argmax(y_,1))
准确度=tf.reduce\u平均值(tf.cast(正确的预测,“浮动”))
sess.run(tf.initialize\u all\u variables())
对于范围内的i(20000):
批次=列表列下一批(50)
如果i%100==0:
train_accurity=accurity.eval(feed_dict={x:batch[0],y_:batch[1],keep_prob:1.0})
打印(“步骤%d,训练精度%g”%(i,训练精度))
train_step.run(feed_dict={x:batch[0],y_:batch[1],keep_prob:0.5})
打印(“测试精度%g”%accurity.eval(feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0}))

带有-1的形状是线索。错的不是批量大小,而是图像大小。您正在将其展平到批处理维度

为什么图像的大小不对

在第二个conv上,您传递的是
conv1
,而不是
pool1
conv2d(h_conv1,w_conv2)

就个人而言,对于这样的管道,我喜欢在数据流经时使用1个名称


开始使用调试器,这是值得的

带有-1的形状是线索。错的不是批量大小,而是图像大小。您正在将其展平到批处理维度

为什么图像的大小不对

在第二个conv上,您传递的是
conv1
,而不是
pool1
conv2d(h_conv1,w_conv2)

就个人而言,对于这样的管道,我喜欢在数据流经时使用1个名称


开始使用调试器,这是值得的

哪个操作产生了这个错误?我得到了正确的预测和训练精度。我假设它是在列车精度上触发的,因为这就是所谓的正确列车预测。哪个操作产生了这个错误?我在正确列车预测和列车精度上都得到了一个。我认为它会触发列车的精确性,因为这就是所谓的正确预测。我甚至不知道他们为什么使用-1,这对我来说没有意义。但是,这是另一个问题。你的回答是正确的,我打错了。我必须做一些研究,找到一个好的调试器。我甚至不知道他们为什么使用-1,这对我来说没有意义。但是,这是另一个问题。你的回答是正确的,我打错了。我得做些研究,找到一个好的调试器。