1

Matlabで次のようにシグモイド関数を実装しました。

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

100 などの大きな入力を与えると、関数は結果を四捨五入して 1 を返します。

どうすれば正確な値を取得できますか? それは可能ですか、それとも x の値の低い範囲に制限されていますか?

4

2 に答える 2

1

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 
于 2014-04-18T02:55:14.853 に答える
0

1.0000000000000... は約 44 桁の精度なので、何が問題なのかわかりません。

編集: 以前のバージョンでは、300 桁と言っていましたが、何らかの理由でその計算で x=900 を使用していました。ここにいくつかの数字があります:

.

Maple を使用して計算されます。

于 2014-04-18T02:15:55.697 に答える