Contents
ニュートラルネットワーク(分類)の実装
今回は分類の実装になるので、出力層のニューロンが二つになります。
さらに、出力層の活性化関数にはソフトマックス関数を今回は使用します。
ソフトマックス関数の特徴として戻り値の合計が1になるとういう性質がありますので、これ確率として捉えることができます。
ソフトマックス関数に二つの値を渡しているため、戻り値も要素数2の配列が返却されるのでその値を比較して分類しています。
import numpy as np
import matplotlib.pyplot as plt
X = np.arange(-1.0, 1.0, 0.1)
Y = np.arange(-1.0, 1.0, 0.1)
w_middle = np.array([,
[2.0,3.0]])
w_out = np.array([[-1.0,1.0],
])
b_middle = np.array([0.3,-0.3])
b_out = np.array([0.4, 0.1])
#中間層
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 np.exp(u)/np.sum(np.exp(u)) #ソフトマックス関数
#分類リスト
x_1 = []
y_1 =[]
x_2 =[]
y_2=[]
for i in range(20):
for j in range(20):
inp = np.array([X[i],Y[j]])
mid = middle(inp, w_middle,b_middle)
out = output(mid, w_out, b_out)
if out[0] > out: #戻り値の比較
x_1.append(X[i])
y_1.append(Y[j])
else:
x_2.append(X[i])
y_2.append(Y[j])
plt.scatter(x_1, y_1, marker="+")
plt.scatter(x_2,y_2,marker="o")
plt.show