我在Matlab中实现了如下的sigmoid函数。
function [y] = sig(x)
y = 1.0 / (1.0 + exp(-x));
end
当我给它一个大输入(例如100)时,该函数会将我的结果四舍五入并给我一个。
我怎样才能获得准确的价值?是否有可能或者我限制在x值的低范围内。
答案 0 :(得分: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
答案 1 :(得分:0)
1.0000000000000 ...精确到大约44位数,所以我不确定会出现什么问题?
编辑:在早期版本中,我说300位数 - 由于某种原因,我在该计算中使用了x = 900。以下是几位数字:
0.99999999999999999999999999999999999999999996279924023979164037040304196136881662641107846012870706553139188204855222012652822147634307
使用Maple进行计算。