Contents
ニュートラルネットワーク(回帰)の実装
今回は以下の図のような入力層2,中間層2,出力層1の3層で作成していきます。
また中間層には活性化関数のシグモイド関数、出力層には恒等関数を使用しています。
- 入力層の数が2,中間層の数が2なので中間層には$2*2 = 4$個の重みが必要
- 中間層の数が2,出力層の数が2なので$2*1 = 2$個の重みが必要
- バイアスの数はニューロンの数に等しい
コード一覧
import numpy as np
import matplotlib.pyplot as plt
X = np.arange(-1.0,1.0,0.2) #X.length = 10
Y = np.arange(-1.0,1.0,0.2)
Z= np.zeros((10,10)) #10*10のグリッドを生成
#重みの設定
w_middle = np.array([[4.0, 4.0],
[4.0, 4.0]]) #中間層 2*2
w_out = np.array([[1.0],
[-1.0]]) #出力層 2*1
#バイアスの設定
b_middle = np.array([3.0, -3.0]) #中間層
b_out = np.array(0.1) #出力層
#中間層 シグモイド関数
#引数 input値、重み、バイアス
def middle(x, w, b):
u = np.dot(x,w) + b
return 1/(1+np.exp(-u))
#出力層 恒等関数
def output(x,w,b):
u = np.dot(x,w) + b
return u
for i in range(10):
for j in range(10):
inp = np.array([X[i], Y[j]])
mid = middle(inp, w_middle, b_middle)
out = output(mid, w_out, b_out)
Z[j][i] = out[0]
plt.imshow(Z, "gray", vmin=0.0, vmax=1.0)
plt.colorbar()
plt.show()