ステップ関数の実装
ステップ関数は入力が0を超えたら1を出力し、それ以外は0を出力する関数。
#ステップ関数 def step_function(x): y = x > 0 return y.astype(np.int)
#Numpyの便利な機能 import numpy as np x = np.array([-1.0, 1.0, 2.0]) print(x) #Numpy配列に対して不等号による演算を行う y = x > 0 print(y)
[out]
[-1. 1. 2.]
[False True True]
Numpy配列に対して不等号の演算を行うと、配列の各要素に対して不等号の演算が行われブーリアンの配列が生成される。
xという配列の要素に対し、0より大きい要素はTrue、0以下の要素はFalseに変換され、新しい配列yが生成される。
ステップ関数は、0か1の『int型』を出力する関数なので、配列yの要素をブーリアンからint型に変換する。
y = y.astype(np.int) print(y)
[out]
[0 1 1]
Numpy 配列の型をastype()で希望する型に変換(ここではnp.int) Pythonではブーリアン型からint型に変換すると、Trueが1に、Falseが0に変換される。
#ステップ関数のグラフ import numpy as np import matplotlib.pyplot as plt %matplotlib inline def step_function(x): return np.array(x > 0, dtype = np.int) x = np.arange(-5.0, 5.0, 0.1) y = step_function(x) plt.plot(x, y) plt.ylim(-0.1, 1.1) #yの範囲を指定 plt.show()
シグモイド関数の実装
#シグモイド関数 def sigmoid(x): return 1 / (1+np.exp(-x))
x = np.array([-1.0, 1.0, 2.0]) sigmoid(x)
[out]
array([0.26894142, 0.73105858, 0.88079708])
シグモイド関数の計算にはNumpyの便利な機能であるブロードキャストが使われている。
#Numpyのブロードキャスト t = np.array([1.0, 2.0 ,3.0]) b = 1.0 + t print(b) c = 1 / t print(c) #シグモイド関数 def sigmoid(x): return 1 / (1+np.exp(-x))←この部分
#シグモイド関数のグラフ import matplotlib.pyplot as plt import numpy as np %matplotlib inline def sigmoid(x): return 1 / (1 + np.exp(-x)) x = np.arange(-7.0, 7.0, 0.1) y = sigmoid(x) plt.plot(x, y) plt.ylim(-0.1, 1.1) #yの範囲を指定 plt.show()
シグモイド関数をステップ関数の比較
シグモイド関数をステップ関数を比較すると大きな違いは『滑らかさ』である。
グラフを見るとよくわかるのだが、ステップ関数は0か1のどちらかしか返さないのに対して、シグモイド関数は0.23や0.60などの実数を返す。
パーセプトロンではニューロン間を0か1の二値の信号が流れていたのに対して、ニューラルネットワークでは連続的な実数値の信号が流れる。
また、どちらの関数も入力信号がどんなに大きかろうが、小さかろうが出力信号の値を0から1の間に押し込めることができる。
コメント