post Image
Numpyのみを用いた、畳み込みニューラルネットワークの実装


はじめに

 畳み込みニューラルネットワークの理解のため、深層学習用のライブラリに依存せず、Numpyのみを用いPythonでアルゴリズムを実装しました。

 今後はGPUに対応させたものに改良したいです。また、逆誤差が適切に伝播しているかは未検証ですので、まだまだ開発途中のものを掲載しています。

GitHub

https://github.com/NaotoMasuzawa/Deep_Learning/tree/master/Python_CNN


参照したコードと技術書

 コードを実装するにあたって、Yusuke SugomoriさんのGitHubと技術書を参考にしました。大変感謝しています。

GitHub

https://github.com/yusugomori

技術書

https://www.amazon.co.jp/Java-Learning-Essentials-Yusuke-Sugomori-ebook/dp/B01956B5RQ


概略

 通常の畳みこみニューラルネットワークに加え、隠れ層の中に確率的にニューロンの一部を0にするドロップアウトが実装してあります。また、活性化関数はReLUを用いています。

 


コードの構成と注釈

Build.py

 層の構成やパラメータをここで設定します。また、コードを実行する際には、

ここでパラメーターを設定し、python Build.pyで実行出来るはずです。

Convolutional_Neural_Network.py

 各クラスが層の構成に応じて、ここで立ち上がります。

Conv_Pool_Layer.py

 畳み込み層とプーリング層が実装されています。畳こみ層はfor文が多用され、

そのインデックスの関係が複雑になるので、一つ一つに意味を持たせました。

そのため、コードの一部の横幅が長くなっています。

Hidden_Layer.py

 全結合層で用いられる、通常の多層パーセプトロンに、ドロップアウトが

実装されたものです。

Logistic_Regression.py

 ロジスティック回帰が実装されています。

utils.py

 活性化関数(ReLU)が実装されています。他の活性化関数(シグモイド関数など)と比較したい場合は、ここに記述します。


最後に

 このコードを用いて、実際の重い処理は実行していないので、バグなどが含まれている可能性があります。その際には報告頂けると幸いです。


『 Python 』Article List