You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TensorFlow问题:训练MLP后无法正确获取测试样本预测值

问题分析与解决办法

你遇到的问题核心其实很明确:你两段代码都是在计算测试集真实标签的类别索引,根本没有调用模型的预测输出

让我拆解一下:

  • tf.argmax(labels_test, 1)这个操作只依赖于labels_test本身,和你feed_dict里传入的X(测试数据)、dropout_keep_prob(dropout保留概率)完全没有关系。所以不管加不加feed_dict,运行结果自然一模一样——因为你从始至终都在处理真实标签,而不是模型的预测结果。

正确的做法

你需要针对模型的输出张量来做tf.argmax操作,才能得到模型对测试数据的预测类别。举个常见的例子:

假设你的MLP最后一层输出被定义为logits(比如logits = tf.matmul(final_dense_layer, weights) + biases),那正确获取预测值的代码应该是:

# 获取模型对测试数据的预测类别
predicted_classes = sess.run(tf.argmax(logits, 1), feed_dict={X: data_test, dropout_keep_prob: 1.})
# 获取测试集的真实类别(用来和预测值对比)
true_classes = sess.run(tf.argmax(labels_test, 1))

这样predicted_classes才是模型根据data_test输出的预测结果,和true_classes对比就能评估模型性能了。

额外注意点

  • 确保你已经完成了模型的训练:也就是已经通过session.run执行过训练步骤,更新了模型的权重参数,否则预测结果会是初始随机参数的输出,毫无意义。
  • 确认labels_test确实是测试集的真实标签数据,避免数据混淆。

内容的提问来源于stack exchange,提问作者user1670773

火山引擎 最新活动