TensorFlow:Softmax 应用于每个条目
TensorFlow: Softmax applied to each entry
我有一个 tf.float32
类型的张量 x
,我想对所有条目应用 softmax。不幸的是,内置函数只能沿指定轴应用 softmax。
我想到的解决方案:
e = tf.exp(x)
softmaxed = e / tf.reduce_sum(e)
不 有效 - 如果 x
的条目太大(例如 100),则 e
无法正确计算。
因为 softmax(x) = softmax(x-c)
对于任何常数 c
(exp(-c)
从所有指数中分解出来,并在分子和反母之间抵消),您可以以数值稳定的方式应用 softmax通过减去一个适当的常数。减去所有条目的最大值意味着所有指数都将在 0 和 1 之间,并且可以稳定地计算结果。试一试:
max_x = tf.reduce_max(x)
e = tf.exp(x-max_x)
softmaxed = e / tf.reduce_sum(e)
我有一个 tf.float32
类型的张量 x
,我想对所有条目应用 softmax。不幸的是,内置函数只能沿指定轴应用 softmax。
我想到的解决方案:
e = tf.exp(x)
softmaxed = e / tf.reduce_sum(e)
不 有效 - 如果 x
的条目太大(例如 100),则 e
无法正确计算。
因为 softmax(x) = softmax(x-c)
对于任何常数 c
(exp(-c)
从所有指数中分解出来,并在分子和反母之间抵消),您可以以数值稳定的方式应用 softmax通过减去一个适当的常数。减去所有条目的最大值意味着所有指数都将在 0 和 1 之间,并且可以稳定地计算结果。试一试:
max_x = tf.reduce_max(x)
e = tf.exp(x-max_x)
softmaxed = e / tf.reduce_sum(e)