Python のシグモイド関数
-
Python で
math
モジュールを使用してシグモイド関数を実装する -
Python で
numpy.exp()
メソッドを使用してシグモイド関数を実装する -
Python で
SciPy
ライブラリを使用して Sigmoid 関数を実装する
このチュートリアルでは、Python でシグモイド関数を使用するためのさまざまな方法を調べます。シグモイド関数は数学的なロジスティック関数です。これは、統計、音声信号処理、生化学、および人工ニューロンの活性化関数で一般的に使用されます。シグモイド関数の式は F(x) = 1/(1 + e^(-x))
です。
Python で math
モジュールを使用してシグモイド関数を実装する
math
モジュールを使用して、Python で独自のシグモイド関数を実装できます。シグモイド関数を実装するには、math
モジュールの math.exp()
メソッドが必要です。
以下のサンプルコードは、Python でシグモイド関数を使用する方法を示しています。
import math
def sigmoid(x):
sig = 1 / (1 + math.exp(-x))
return sig
この実装の問題は、数値的に安定しておらず、オーバーフローが発生する可能性があることです。
Python でのシグモイド関数の数値的に安定した実装のサンプルコードを以下に示します。
import math
def stable_sigmoid(x):
if x >= 0:
z = math.exp(-x)
sig = 1 / (1 + z)
return sig
else:
z = math.exp(x)
sig = z / (1 + z)
return sig
Python で numpy.exp()
メソッドを使用してシグモイド関数を実装する
Python で numpy.exp()
メソッドを使用してシグモイド関数を実装することもできます。math.exp()
メソッドを使用したシグモイド関数の実装と同様に、numpy.exp()
メソッドを使用してシグモイド関数を実装することもできます。
math.exp()
に対する numpy.exp()
メソッドの利点は、整数または浮動小数点数の他に、配列の形状で入力を処理できることです。
以下は、Python で numpy.exp()
メソッドを使用した通常のシグモイド関数の実装です。
import numpy as np
def sigmoid(x):
z = np.exp(-x)
sig = 1 / (1 + z)
return sig
シグモイド関数を数値的に安定して実装するには、最初に入力配列の各値の値を確認してから、シグモイドの値を渡す必要があります。このために、以下のサンプルコードに示すように、np.where()
メソッドを使用できます。
import numpy as np
def stable_sigmoid(x):
sig = np.where(x < 0, np.exp(x) / (1 + np.exp(x)), 1 / (1 + np.exp(-x)))
return sig
Python で SciPy
ライブラリを使用して Sigmoid 関数を実装する
SciPy
ライブラリに expit
と呼ばれるシグモイド関数をインポートするだけで、Python のシグモイド関数の SciPy
バージョンを使用することもできます。
以下のサンプルコードは、SciPy
ライブラリを使用してシグモイド関数を使用する方法を示しています。
from scipy.special import expit
x = 0.25
sig = expit(x)
expit()
メソッドは、上記の実装よりも低速です。expit()
メソッドの利点は、リストや配列などのさまざまなタイプの入力を自動的に処理できることです。
from scipy.special import expit
sig = expit(np.array([0.25, 0.5, 0.6, 0.7, 0.4]))
print(sig)
出力:
[0.5621765 0.62245933 0.64565631 0.66818777 0.59868766]