TensorFlow:Softmax应用于每个条目

时间:2018-08-09 13:00:21

标签: python tensorflow softmax

我有一个x类型的张量tf.float32,我想对所有条目应用softmax。不幸的是,内置函数只能沿指定轴应用softmax。

我想到的解决方案:

e = tf.exp(x)
softmaxed = e / tf.reduce_sum(e)

不起作用-如果x的条目太大(例如100),则e无法正确计算。

1 个答案:

答案 0 :(得分:1)

由于softmax(x) = softmax(x-c)对于任何常量cexp(-c)在所有指数中都是因子,并且在分子和定界符之间抵消),因此您可以通过将数值减去来以数值稳定的方式应用softmax一个适当的常数。减去所有条目的最大值表示所有指数将在0到1之间,并且可以稳定地计算结果。试试看:

max_x = tf.reduce_max(x)
e = tf.exp(x-max_x)
softmaxed = e / tf.reduce_sum(e)