Python 为什么tensorflow equal给出了错误的结果

Python 为什么tensorflow equal给出了错误的结果,python,tensorflow,Python,Tensorflow,当我们应用CNN网络时,tf.equal()函数似乎很奇怪。在以下情况下,tf.equal()返回不正确的结果 with tf.Graph().as_default(): images, labels = inputs("./test_data", [64, 64], 10, True) logits = inference(images, 2, 1.0) acc = accuracy(logits, labels)

当我们应用CNN网络时,
tf.equal()
函数似乎很奇怪。在以下情况下,
tf.equal()
返回不正确的结果

with tf.Graph().as_default():

            images, labels = inputs("./test_data", [64, 64], 10, True)

            logits = inference(images, 2, 1.0)

            acc = accuracy(logits, labels)

            saver = tf.train.Saver()

            #predict_image(saver, logits)

            eval_once(saver, logits, acc, labels)



def eval_once(saver, logits, acc, labels):
    with tf.Session() as sess:
            ckpt = tf.train.get_checkpoint_state("./model/")
            if ckpt and ckpt.model_checkpoint_path:
                    saver.restore(sess, ckpt.model_checkpoint_path)
                    print "Model Loaded!"
            else:
                    print "Model Not Found!"
                    return

            coord = tf.train.Coordinator()

            threads = tf.train.start_queue_runners(sess, coord = coord)

            l = tf.argmax(labels,1)
            p = tf.argmax(logits,1)

            print "labels"
            print sess.run(l)

            print "preds"
            print sess.run(p)

            print sess.run(tf.equal(l, p))

            print "%.5f" % sess.run(acc)

            coord.request_stop()

            coord.join(threads, stop_grace_period_secs = 10)
在代码中,输入将通过
文件队列
读取图像,而
推理
定义了我们的CNN网络。
推理的输出是最后一个完全连接层的logits。在我的例子中,标签是一个热编码的,有两个类,所以它应该是[1,0]或[0,1]

结果如下:

labels
[0 0 1 0 1 0 0 0 1 0]
preds
[0 1 0 1 0 0 1 0 1 1]
[ True  True  True  True  True  True  True  True  True  True]
0.90000
从结果中,我们发现标签和pred在索引1处不相等(从索引0开始)。但是,
tf.equal()
为我们提供了
True
。与指标2、指标3相同

然后我在其他一些情况下测试了
tf.equal()
,结果是正确的

那么,这怎么会发生呢


(我使用文件队列读取图像并应用
tf.train.batch
tf.train.shuffle
创建用于训练和测试的批。就像tensorflow示例中的cifar 10示例一样)

经过思考,每次调用
sess.run()时都有一种可能性
文件队列将读取混乱的图像和标签,这样结果是正确的。

在同一个调用中使用类似于
l_val,p_val,eq_val,acc_val=sess的内容评估每个张量。运行([l,p,tf.equal(l,p),acc])
并查看结果是否仍然不正确谢谢
jdehesa
。这就是问题所在。