Matlabで次のようにシグモイド関数を実装しました。
function [y] = sig(x)
y = 1.0 / (1.0 + exp(-x));
end
100 などの大きな入力を与えると、関数は結果を四捨五入して 1 を返します。
どうすれば正確な値を取得できますか? それは可能ですか、それとも x の値の低い範囲に制限されていますか?
Matlabで次のようにシグモイド関数を実装しました。
function [y] = sig(x)
y = 1.0 / (1.0 + exp(-x));
end
100 などの大きな入力を与えると、関数は結果を四捨五入して 1 を返します。
どうすれば正確な値を取得できますか? それは可能ですか、それとも x の値の低い範囲に制限されていますか?
1 とシグモイド関数の差が必要な場合は、単純化された数式で関数を定義できます。
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 を使用していました。ここにいくつかの数字があります:
.
Maple を使用して計算されます。