我在 Matlab 中实现了如下的 sigmoid 函数。
function [y] = sig(x)
y = 1.0 / (1.0 + exp(-x));
end
当我给它一个大的输入(例如 100)时,该函数会四舍五入我的结果并给我一个 1。
我怎样才能得到它的准确值?是否有可能或者我是否将 x 的值限制在一个较低的范围内。
我在 Matlab 中实现了如下的 sigmoid 函数。
function [y] = sig(x)
y = 1.0 / (1.0 + exp(-x));
end
当我给它一个大的输入(例如 100)时,该函数会四舍五入我的结果并给我一个 1。
我怎样才能得到它的准确值?是否有可能或者我是否将 x 的值限制在一个较低的范围内。
如果您想要 1 和您的 sigmoid 函数之间的差异,您可以使用简化的数学表达式定义一个函数:
1 - 1/(1+exp(-x)) = (1+exp(-x))/(1+exp(-x)) - 1/(1+exp(-x)) = exp(-x ) / (1+exp(-x))
function [y] = one_minus_sig(x)
y = exp(-x) / (1+exp(-x));
end
接着:
one_minus_sig(100) = 3.7200759760208356e-44
1.0000000000000... 精确到大约 44 位,所以我不确定问题是什么?
编辑:在早期版本中,我说的是 300 位数字——出于某种原因,我在该计算中使用了 x=900。这里有几个数字:
0.99999999999999999999999999999999999999999996279924023979164037040304196136881662641107846012870706553139188204852142201230243
使用 Maple 计算。