こんにちは!!ようこそ、当ブログ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
・出力層 ユニット数1
活性化関数はシグモイド関数を使います。
参考Pythonでニューラルネットワークの活性化関数シグモイド関数を実装
Pythonでニューラルネットワーク 実装
下のリンクページを参考にしてみました。
ニューラルネットワークコード
実装したコードです。
データとハイパーパラメータ
ユニットサイズ、入力と教師データ、エポック、学習率を定義します。
学習開始
MLPクラス内部のコンストラクタでは重み\( W \)とバイアス\( b \)の初期化を行っています。
以下のコードで実行します!!!
学習スターーーット!!
学習結果
出力!アウトプット!
\( [ 0.00158119] \\
[ 0.99782244]\\
[ 0.99853501]\\
[ 0.00137621]
\)
\( [0,1,1,0] \)に分類することができています。
コストもいい感じ?に減っていますね!
\( X \) | \( y \) | \( Output \) |
---|---|---|
\( [0,0] \) | 0 | 0.00158119 |
\( [0,1] \) | 1 | 0.99782244 |
\( [1,0] \) | 1 | 0.99853501 |
\( [1,1] \) | 0 | 0.00137621 |
おわりに
ひとまずニューラルネットワークを実装することができました。
「データとハイパーパラメータ」で決める各層のユニット数のパラメータを変更するだけでいろんなモデルのネットワークに変身させることができます。
今度はもう少し複雑なデータセットとかミニバッチ学習、 CNN にも挑戦してみようと思います。
※誤植がありましたらお知らせいただけますと幸いです。
この記事を書いた人。
20代。とあるネットベンチャーでがんばる働き屋さん、ブロガー。
書きたいことを気ままに書いてます!
Python、プログラミング、米株、カメラ、野球観戦がすき。趣味は新宿散策。