Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow逻辑运算((A==B)&;(C==D))导致;不兼容的形状:[2]与[3]";_Python_Tensorflow - Fatal编程技术网

Python TensorFlow逻辑运算((A==B)&;(C==D))导致;不兼容的形状:[2]与[3]";

Python TensorFlow逻辑运算((A==B)&;(C==D))导致;不兼容的形状:[2]与[3]";,python,tensorflow,Python,Tensorflow,我试图构建以下逻辑表达式- tf.logical_and(tf.equal(tf.argmax(y_conv,0), tf.argmax(y_,0)), tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)), name=None) 但它会导致以下错误- 不兼容的形状:[2]与[3] tf.equal(tf.argmax(y_conv,0),tf.argmax(y_,0))和tf.equal(tf.argmax(y_con

我试图构建以下逻辑表达式-

tf.logical_and(tf.equal(tf.argmax(y_conv,0), tf.argmax(y_,0)), 
                tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)), name=None)
但它会导致以下错误-

不兼容的形状:[2]与[3]

tf.equal(tf.argmax(y_conv,0),tf.argmax(y_,0))
tf.equal(tf.argmax(y_conv,1),tf.argmax(y_,1))
分别工作正常,只有
tf.logical_和
发生错误
tf.logical_和
需要布尔张量,而
tf.equal
返回布尔张量,因此所有参数都是有序的,因此不确定它失败的原因

为了提供一些上下文,原始代码如下所示,我只是尝试更新
correct_prediction
以包含
tf.argmax的0和1

UPDATE1 Start(这将添加所有变量声明)

UPDATE1 End(这将添加所有变量声明)

这就是问题所在-

y_ = tf.placeholder(tf.float32, shape=[None, 2])
y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
#This works - correct_prediction = tf.equal(tf.argmax(y_conv,0), tf.argmax(y_,0)) . Changed it to -
correct_prediction = tf.logical_and(tf.equal(tf.argmax(y_conv,0), tf.argmax(y_,0)), 
                tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)), 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.global_variables_initializer())
train_step.run(feed_dict={x: xtrain, y_: ytrain, keep_prob: 0.5})
#In debugging mode, code breaks at the below line
print("test accuracy %g"%accuracy.eval(feed_dict={x: xtest, y_: ytest, keep_prob: 1.0}))

如何调试此错误?

问题的出现是因为
tf.equal()
是一个元素操作,它返回一个与参数形状相同的张量。修复表达式的最简单方法是使用
tf.reduce_all()
在计算
tf.logical_和()
之前,将
tf.equal()
的结果聚合为一个标量,如下所示:

tf.logical_and(
    tf.reduce_all(tf.equal(tf.argmax(y_conv, 0), tf.argmax(y_, 0))), 
    tf.reduce_all(tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))))

你认为你能把它提炼成一个简单的自给自足的10号班轮吗?那会有帮助的。完成。我对python和tensorflow不够精通,无法将其改写为更小的版本,但我在单独的一节“UPDATE 1”中添加了缺少的代码。但问题的核心是,为什么
tf.logical_和(tf.equal(…),tf.equal(…)
都失败了,而
tf.equal(…)
都能正常工作。
tf.equal
返回布尔张量,而
tf.logical_和
需要布尔张量,那么为什么它会失败呢?
tf.logical_and(
    tf.reduce_all(tf.equal(tf.argmax(y_conv, 0), tf.argmax(y_, 0))), 
    tf.reduce_all(tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))))