IT系フリーランスの日記

大まかにIT系と呼ばれる仕事を自営業として営んでいる者の日記です

フレームワークを使わずにPythonでニューラルネットワークを作る。

以前、Udemyのゼロから作るニューラルネットワークという講座の最終課題として、PythonとNumpy、Pandasを使用して、
2013年のワシントンD.C.におけるバイクレンタル数のデータをニューラルネットワークに学習させて、予測するモデルを
作成するという課題を行ったときの事を書きます。

作成したコードをGoogle Colabで公開しています。
自作ニューラルネットワーク

作成当初、入力数値を標準化するという考えがなく入力データをそのまま使用していたため、
シグモイド関数がサチュレートしてしまい、うまく計算できないという現象に出くわして、右往左往していました。

結局いろいろ調べて、入力に用いる値は標準化する事や、One-Hot Encodingするべき値などについて理解して、ニューラルネットワークの自作に成功しました。

今回作成したものは、CNNなどの畳み込み処理を行っていないことや、入力層と隠れ層、出力層の3層のみでディープニューラルネットワークではない事から、
LeRU関数ではなく、古典的なシグモイド関数を使用しました。

以下のスクリーンショットが、教師データ以外のデータから、その日に貸し出されるだろうと予測されたレンタルバイクの台数と、
実際の貸し出されたレンタルバイクの台数を比較したものです。
f:id:tyusuke88:20191112152132p:plain

適合はまずまずのようです。

最後に、学習を進めていくうちに、訓練データでの精度は上がり続けるにもかかわらず、訓練データに使用していない検証用データでの精度が
落ち始めて、過学習が進んでいく過程を含めた全体のエラー率(学習モデルの誤差)をグラフにしたものです。

f:id:tyusuke88:20191112153222p:plain
訓練の過程