勉強用に作っている https://pycall-mnist.herokuapp.com をリファクタリングした。
O'Reilly Japan - ゼロから作るDeep Learning の第4章をベースにした素朴な実装だったが、第5章を参考にレイヤークラスで処理するようにした。
predict
に(勝手に)用意していたskip_activate_output
フラグは不要になった。
必要な時にlastLayer
を呼び出す形に。
※ 推論の時は生データ(スコア)でいいのでlastLayer
は不要。
まずはSigmoid
のまま実装して、rspecが通ることを確認。
その後、ReLU
に切り替えた。
Sigmoid
train acc, test acc | 0.9468333333333333%, 0.9452%
ReLU
train acc, test acc | 0.9791166666666666%, 0.9713%
ReLUにしただけで認識精度が3%も上がった…!
PyCallのバージョンも上がっていたので合わせてアップデート。特に問題なし。
ソース
Layers by tnantoka · Pull Request #1 · tnantoka/pycall-mnist
参考
Python DeepLearningに再挑戦 15 誤差逆伝播法 Affine/Softmaxレイヤの実装 - Djangoroidの奮闘記