PythonとNumpyでゼロからニューラルネットワークをスクラッチ実装

Share

こんにちは!!ようこそ、当ブログgcbgardenへ。管理人のsakurabaaa(@sakurabaaa_g)です。

Tensorflow,Keras,Chainerといったフレームワークを使わずに Python と Numpy だけでニューラルネットワーク Neural Network を実装してみました。

そのまま実行すれば誰でも使うことができるコードは記事の下に掲載しています。

スポンサーリンク

Pythonでニューラルネットワーク

今回はニューラルネットワークでXORの分類を行いました。

入力が\( [0,0], [1,1] \)のときは0を出力し、

入力が\( [0,1], [1,0] \)のときは1を出力します。

以下の画像のようなXORを目指します。

参考ニューラルネットワーク勉強会2

ニューラルネットワークの構造

ニューラルネットワークの構造は以下のようにしました。

・入力層 ユニット数2
・隠れ層 ユニット数2
・出力層 ユニット数1

活性化関数はシグモイド関数を使います。

参考Pythonでニューラルネットワークの活性化関数シグモイド関数を実装

Pythonでニューラルネットワーク 実装

下のリンクページを参考にしてみました。

参考Coursera “Neural Networks”

ニューラルネットワークコード

実装したコードです。

      

データとハイパーパラメータ

ユニットサイズ、入力と教師データ、エポック、学習率を定義します。

      

学習開始

MLPクラス内部のコンストラクタでは重み\( W \)とバイアス\( b \)の初期化を行っています。

以下のコードで実行します!!!

no-img2
sakuraba

学習スターーーット!!

      

学習結果

出力!アウトプット!

\( [ 0.00158119] \\
[ 0.99782244]\\
[ 0.99853501]\\
[ 0.00137621] \)

ニューラルネットワークコストプロット

\( [0,1,1,0] \)に分類することができています。

コストもいい感じ?に減っていますね!

\( X \)\( y \)\( Output \)
\( [0,0] \)00.00158119
\( [0,1] \)10.99782244
\( [1,0] \)10.99853501
\( [1,1] \)00.00137621

おわりに

ひとまずニューラルネットワークを実装することができました。

データとハイパーパラメータ」で決める各層のユニット数のパラメータを変更するだけでいろんなモデルのネットワークに変身させることができます。

今度はもう少し複雑なデータセットとかミニバッチ学習、 CNN にも挑戦してみようと思います。

※誤植がありましたらお知らせいただけますと幸いです。

この記事を書いた人。
20代。とあるネットベンチャーでがんばる働き屋さん、ブロガー。
書きたいことを気ままに書いてます!
Python、プログラミング、米株、カメラ、野球観戦がすき。趣味は新宿散策。

スポンサーリンク

Share

Follow