在Tensorflow中计算正确预测的正确方法是什么?

时间:2016-10-24 04:05:24

标签: tensorflow

我使用包含灰度图像作为输入和整数类标签的tfrecords文件在Tensorflow中提供简单的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中计算正确的预测感到有点困惑。

2 个答案:

答案 0 :(得分:3)

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

我希望有所帮助!

答案 1 :(得分:1)

对于y_conv,你做的一切都是正确的 - 它是一个形状(batch_size, n_classes)的矩阵,对于每个样本,每个类都有一个概率,即这是图像所属的类。因此,要获得实际的预测课程,您需要拨打argmax

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

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