我使用包含灰度图像作为输入和整数类标签的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中计算正确的预测感到有点困惑。
答案 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))