ディープラーニング

【python】1日30分のディープラーニング -20日目- ~ニュートラルネットワーク(分類)の実装~

ニュートラルネットワーク(分類)の実装

今回は分類の実装になるので、出力層のニューロンが二つになります。
さらに、出力層の活性化関数にはソフトマックス関数を今回は使用します。
ソフトマックス関数の特徴として戻り値の合計が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