次の機能を使用する必要があるいくつかの実験を実行しています。
import math
def sigmoid(x):
return 1.0 / (1.0 + math.exp(-x))
この関数は から0.0
までの数値を返します1.0
( https://en.wikipedia.org/wiki/Sigmoid_functionを参照)。input に小さな値を指定するx
と、結果は期待どおりになります。
>>> sigmoid(1)
0.7310585786300049
>>> sigmoid(5)
0.9933071490757153
>>> sigmoid(7)
0.9990889488055994
>>> sigmoid(10)
0.9999546021312976
>>> sigmoid(20)
0.9999999979388463
>>> sigmoid(30)
0.9999999999999065
ただし、x が大きくなると、関数は常に 1.0 を返します。
>>> sigmoid(40)
1.0
>>> sigmoid(45)
1.0
>>> sigmoid(50)
これは、潜在的に非常に小さい数 ( ) で 1.0 を加算する関数の一部に関係していると思われます1.0 + math.exp(-x)
。例えば
>>> 1.0 + math.exp(-30)
1.0000000000000935
>>> 1.0 + math.exp(-40)
1.0
>>> 1.0 + math.exp(-50)
1.0
>>> 1.0 + math.exp(-60)
1.0
Python がこのようなエラーを起こさないようにするにはどうすればよいですか? オーバーフロー(またはアンダーフロー??)の問題だと思います。任意のヒント?前もって感謝します。