1

我在 Matlab 中实现了如下的 sigmoid 函数。

function [y] = sig(x)
    y = 1.0 / (1.0 + exp(-x));
end

当我给它一个大的输入(例如 100)时,该函数会四舍五入我的结果并给我一个 1。

我怎样才能得到它的准确值?是否有可能或者我是否将 x 的值限制在一个较低的范围内。

4

2 回答 2

1

如果您想要 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 
于 2014-04-18T02:55:14.853 回答
0

1.0000000000000... 精确到大约 44 位,所以我不确定问题是什么?

编辑:在早期版本中,我说的是 300 位数字——出于某种原因,我在该计算中使用了 x=900。这里有几个数字:

0.99999999999999999999999999999999999999999996279924023979164037040304196136881662641107846012870706553139188204852142201230243

使用 Maple 计算。

于 2014-04-18T02:15:55.697 回答