如何用max代替tensorflow softmax在神经网络的输出层生成一个热矢量?

时间:2019-07-01 11:32:22

标签: python tensorflow neural-network one-hot-encoding softmax

对于分类问题,在神经网络的最后一层使用softmax函数。
我想将softmax层替换为生成一个热矢量的max层,将其中一个设置为出现最大值的索引,并将所有其他条目设置为零。

我可以按照TensorFlow - dense vector to one-hotTensorflow: Convert output tensor to one-hot的建议使用tf.argmax做到这一点,但是这些并不是可区分的方式,无法计算出梯度。

如果不能获得精确的0和1,则值应足够接近。

我曾想多次应用softmax,但不建议这样做,我也不了解其背后的原因。

请提出一个不同的解决方案。

2 个答案:

答案 0 :(得分:0)

如果我正确理解,我认为您所描述的是不可能的。为了使操作可微,我们需要能够找到一个梯度。

直觉上,如果您只是将所有值都剪切为0或1,这是没有意义的

对评论的更新:

可以 metric 计算中始终使用此类操作。这将使您在培训过程中对性能有“更准确的了解”(但不会用于培训-只是将结果报告给您)。

不可能将其用于损失/目标函数,因为这不是神经网络学习的工作原理。我会尝试解释一下。

有适当的数学依据和定义可以解释为什么损失函数需要可微,但直觉上,我们可以想象我们的优化器需要“平滑”,“连续”的曲面才能进行处理。

想象一下,在光滑,连续的平面上蒙着双眼蒙着眼睛,并被要求找到最低点。一种策略是将脚踩到周围的圆圈中,直到找到可以使自己走得最远的步骤。现在,请执行该步骤,然后再次重复。不断重复直到您到达底部,而没有向下的步伐。可以想到以这种方式进行梯度下降优化。每次靠近底部时,我们都会朝着最低点的方向迈出小步。

现在,假设除了单个悬崖边缘之外,没有一个光滑的平面,而是一个完全平坦的表面。无论您站在那架飞机上的哪个位置,都无法知道要朝哪个方向走。如果您远离悬崖边缘,那么一切都将完全平坦。即使您位于悬崖边缘,您仍然不知道要到达最低点的确切方向(您可能有180度可以选择)。

这有意义吗?如果没有光滑连续的表面,我们就不能采用向下走小步的策略?

答案 1 :(得分:0)

不,没有可微解,这就是为什么我们使用softmax激活,因为它是对max函数的可微近似。