softmax 的输出不应该是零,对吧?

Posted

技术标签:

【中文标题】softmax 的输出不应该是零,对吧?【英文标题】:The output of a softmax isn't supposed to have zeros, right? 【发布时间】:2016-12-30 18:49:05 【问题描述】:

我正在使用 tensorflow 中的网络来生成一个向量,然后将其传递给作为我的输出的 softmax。

现在我一直在测试这个,奇怪的是,向量(通过 softmax 的向量)在所有坐标中都为零,但只有一个。

根据 softmax 对指数的定义,我认为这不应该发生。这是一个错误吗?

编辑:我的向量是 120x160 =192000。所有值都是float32

【问题讨论】:

【参考方案1】:

这可能不是错误。您还需要查看 softmax 的输入。这个向量很可能有非常负的值和一个非常正的值。这将导致 softmax 输出向量包含全零和单个值。

您正确地指出,由于指数,softmax 分子不应该有零值。但是,由于浮点精度,分子可能是一个非常小的值,例如 exp(-50000),它的计算结果基本上为零。

【讨论】:

你说得对。该值不是太负或太大,但我添加了一个 lrn 层,它减少了值并使整个事情正常化。 (虽然它大约使我的计算时间增加了一倍,但当我尝试在 GPU 上训练网络时最终可能会更糟,因为 lrn 没有 GPU 的方法。)

以上是关于softmax 的输出不应该是零,对吧?的主要内容,如果未能解决你的问题,请参考以下文章

Large-Margin Softmax Loss for Convolutional Neural Networks

在pytorch中使用交叉熵损失时我应该使用softmax作为输出吗?

sparse_softmax_cross_entropy_with_logits 和 softmax_cross_entropy_with_logits 有啥区别?

Tensorflow学习教程------softmax简单介绍

怎么可能将 softmax 用于 word2vec?

Attention机制知识汇总