0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでneural networkの実装

Posted at

最近勉強を始めたMachine learningやDeep learningについてPythonでコードを書いて実践してみたのでメモとして。完全に初心者向けです。

なお、今回の記事はO'Reillyの「ゼロから作るDeep Learning」を参考にしています。

##Neural Network (3層) の実装
まずは超シンプルに下の画像のようなネットワークをPythonで書いてみます。(適当な画像が見つからなかったので実際は出力層以外の各層の一番上のノードはbias unitと考えてください。)出力層での活性化関数にはシグモイド関数を使用します。
Capture.PNG

まずはシグモイド関数の実装及び各層の重みを設定します。また、biasは常に1であると想定し予め重みをかけ合わせておきます。

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

def init_network():
    network = {}
    network['w1'] = np.array([[0.2, 0.4, 0.8], [0.7, 0.1, 0.9]])
    network['b1'] = np.array([0.1, 0.3, 0.5])
    network['w2'] = np.array([[0.1, 0.8], [0.6, 0.7], [0.3, 0.6]])
    network['b2'] = np.array([0.1, 0.2])
    network['w3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
    network['b3'] = np.array([0.1, 0.2])
    
    return network

次に入力から出力方向へのForward propagationを行う関数を作ります。

def forward_prop(network, x):
    w1, w2, w3 = network['w1'], network['w2'], network['w3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    a1 = np.dot(x, w1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, w2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, w3) + b3
    y = a3
    
    return y

実行すると、

network = init_network()
x = np.array([1.0, 0.5])
y = forward_prop(network, x)
print(y) #[0.33488935 0.73821001]

という結果が得られました。今までMatlabを使っていた身からすると、Numpyの多次元アレイは便利だなというのと素人目にもコードが読みやすいなと思いました。

今回は出力層のノードが二つだったためよりシンプルなシグモイド関数での実装を行いましたが、多クラス分類の場合にはsoftmax関数なんかを使うこともあります。またその際にはオーバーフロー対策としてNormalizationが必要になってきたりしますが、その辺は次の記事でまた書いていきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?