我正在使用包含灰度图像作为输入和整数类标签的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 回答
对于你的
y_conv
你做的一切都是正确的 - 它是一个形状矩阵(batch_size, n_classes)
,对于每个样本和每个类,你有可能这是图像所属的类 . 因此,要获得实际的预测课程,您需要调用argmax
.但是你的标签是整数并且形状只有
(batch_size,)
,因为图像的类是已知的并且没有理由提供n_classes
概率,单个整数也可以保存实际的类 . 所以你不需要在它上面调用argmax
将概率转换为类,它已经有了类 . 要解决它,就这样做您可能希望使用0作为tf.argmax的dimension参数,因为label_batch和y_conv是向量 . 使用dimension = 1意味着张量等级至少为2.请参阅argmax here的维度参数的文档 .
我希望有所帮助!