【问题标题】:Output of tf.softmax_cross_entroy_with_logits unnormalized?tf.softmax_cross_entroy_with_logits 的输出未标准化?
【发布时间】:2017-11-11 03:33:19
【问题描述】:

我为图像分类(二元分类)实现了一个简单的 cnn 网络。我在 Python 中使用 tensorflow。 我使用 tf.softmax_cross_entropy_with logits 作为成本函数。我用模型输出层的非标准化 logits 提供成本函数。函数应该输出归一化的概率,还是我错了?

在我的模型训练期间,我正在打印每个示例的成本。如果模型正确预测输出,则成本等于 0.0,否则成本非常大,未归一化值)。虽然函数'softmaxes'在计算交叉熵之前输入,但为什么输出未归一化?

【问题讨论】:

    标签: tensorflow neural-network loss-function


    【解决方案1】:

    您将交叉熵(您的损失函数)误认为是 softmax(您的网络的“虚拟”输出——见下文)。 Softmax 是标准化的,但交叉熵不是——它可以采用任意高的值来惩罚错误的预测。

    当您结合tf.softmax_cross_entropy_with logits 使用非归一化净输出时,您实际上并没有观察到 softmax 输出:它在成本函数内处理并保持虚拟。要查看 softmax,您可以在网络的非标准化输出上使用 tf.nn.softmax 显式计算它。

    【讨论】:

    • 感谢您的回答。所以几万甚至几百万的成本也不算什么了不起?
    • 它们是可能的,但不寻常。这可能表明您正在使用 sum 而不是 mean 来减少损失。
    • 我目前正在调整权重并添加 dropout 层,但问题仍然存在。 cnn 输出的巨大 logits 是否可能是由非常小的数据集(500 个示例?)引起的,我已经检查了 logits 的 softmax,并且该函数始终返回 1.0 或 0.0 - 两者之间没有任何内容。
    • 这很不寻常,当然可以解释您的观察结果。您可以针对您的问题提出另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多