【发布时间】:2017-12-24 02:36:04
【问题描述】:
我一直在训练神经网络并使用 Tensorflow。 我的成本函数是:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))
训练我的神经网络已导致交叉熵损失从约 170k 减少到约 50,这是一个显着的改进。同时,我的准确率实际上稍微变差了:从 3% 到 2.9%。这些测试是在训练集上进行的,所以不存在过度拟合的问题。
我简单地计算精度如下:
correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
print('Accuracy:', accuracy.eval({x: batch_x, y: batch_y}))
这可能是什么原因? 我是否应该将准确率用作成本函数,因为我的情况的交叉熵(softmax)显然有问题。
我知道在 StackOverflow 上有一个similar question,但这个问题从未得到完全回答。
【问题讨论】:
-
您完成了多少次完整运行?你只运行了两次?如果是这样,它可能只是一个糟糕的运行。你有多少输入特征,你的网络有多大?您是否应用 sigmoid 和/或其他激活函数作为网络中的最后一个操作?如果你删除它,因为 tensorflow 会自动应用 softmax。尝试确认其中一些并给我们更新!
-
我也有同样的问题,你解决了吗?我的损失从高到非常低,但对于 10 类分类,准确率保持在 10% 左右。
-
好的,就我而言,问题与权重初始化有关。当我开始使用
tf.contrib.layers.fully_connected和xavier权重初始化时,问题确实消失了。
标签: machine-learning tensorflow neural-network softmax