2024-10-03 06:27:09 发布
网友
我有一个x类型的张量tf.float32,我想对所有条目应用softmax。不幸的是,内置函数只能沿指定轴应用softmax
x
tf.float32
我想到的解决办法是:
e = tf.exp(x) softmaxed = e / tf.reduce_sum(e)
不起作用-如果x的条目太大(例如100),则e无法正确计算
e
因为softmax(x) = softmax(x-c)对于任何常数c(exp(-c)从所有指数中求因子,并在分子和demoninator之间相消),可以通过减去适当的常数以数值稳定的方式应用softmax。减去所有输入的最大值意味着所有指数都在0到1之间,结果可以稳定地计算出来。试一试:
softmax(x) = softmax(x-c)
c
exp(-c)
max_x = tf.reduce_max(x) e = tf.exp(x-max_x) softmaxed = e / tf.reduce_sum(e)
因为
softmax(x) = softmax(x-c)
对于任何常数c
(exp(-c)
从所有指数中求因子,并在分子和demoninator之间相消),可以通过减去适当的常数以数值稳定的方式应用softmax。减去所有输入的最大值意味着所有指数都在0到1之间,结果可以稳定地计算出来。试一试:相关问题 更多 >
编程相关推荐