【问题标题】:What is the right way to Computing correct predictions in Tensorflow?在 Tensorflow 中计算正确预测的正确方法是什么?
【发布时间】:2017-03-05 18:21:56
【问题描述】:

我在 Tensorflow 中使用一个包含灰度图像作为输入和整数类标签的 tfrecords 文件来提供一个简单的 ConvNet。

我的损失定义为loss = tf.nn.sparse_softmax_cross_entropy_with_logits(y_conv, label_batch)

在哪里y_conv=tf.matmul(h_fc1_drop,W_fc2) + b_fc2

label_batch 是大小为[batch_size] 的张量。

我正在尝试通过使用来计算准确性

correct_prediction = tf.equal(tf.argmax(label_batch,1),tf.argmax(y_conv, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

这个correct_prediction 语句给出了一个错误:

InvalidArgumentError (see above for traceback): Minimum tensor rank: 2 but got: 1

我对在 TF 中究竟如何计算正确预测感到有点困惑。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    您可能希望使用 0 作为 tf.argmax 的维度参数,因为 label_batch 和 y_conv 是向量。使用 dimension=1 意味着张量等级至少为 2。有关 argmax here 的维度参数,请参阅文档。

    希望对你有帮助!

    【讨论】:

    • 第一个维度是样本。计算精度时,dimension=1 是正确的维度。
    【解决方案2】:

    对于您的y_conv,您所做的一切都是正确的——它是一个形状为(batch_size, n_classes) 的矩阵,对于每个样本和每个类别,您都有可能这是图像所属的类别。因此,要获得实际预测的课程,您需要致电argmax

    但是,您的标签是整数并且形状仅为(batch_size,),因为图像的类别是已知的并且没有理由提供n_classes 概率,单个整数也可以包含实际类别。所以你不需要在它上面调用argmax 来将概率转换为一个类,它已经有了这个类。要修复它,只需执行

    correct_prediction = tf.equal(label_batch, tf.argmax(y_conv, 1))
    

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多