lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

MATLABによる軽量NNの開発(2:CIFAR-10の分類テスト)

前回はMNISTでした。白黒で文字だけということで、限定的な状況であるので、全結合でも層を深くしなくてもそこそこの成績は出るかとおもいます。
今後のCNN(FPGA-BNN)ではチャネルが3(=RGB)で進めていくと思うのでチャネルを増やした時に正常動作するかの確認です。
あと独り言ですが、CIFAR-10でもRGB空間の例は多くありますが、分類をするという目的ならL * a * b空間か、HSV変換後にHとV使ってチャネル減らすとかの方がいい気もするんですがどうなんでしょ

CIFAR-10

lynxeyed.hatenablog.com
今回、Convolution層+ReLU層をそれぞれ一つ増やしました。カーネル3x3にしました。
前回の記事で取り上げたようにそれぞれの層をクラス化しているので追加も減層も楽々です。
学習率をepochが進むにつれて、減らすようにしています。

結果

f:id:Lynx-EyED:20210424125016p:plain
あまり思わしくはありませんでした。60%後半台。もう少し学習を進めれば70%半ばくらいはいきそうですが、このあたりで止めます。あくまでチャネルが増えた時の動作の確認というところなので、深追いはやめます。

考察

あまり改善しない理由として、バッチ正規化層、または重み係数のL2ノルムを(またはその二乗を)損失に加算する手法であるWeightDecay層、またはドロップアウト層などを追加していないというのが大きな理由といえます。
これらの手法を実装するのは特に難しくないのですが、BinaryNetでのアプローチはまた少し異なるので、この辺りにしておこうと思った次第です。

コード

以下からcloneできます。
github.com

次回あらすじ

次回から読み解いて実装していく論文ネタはこちらです。
ieeexplore.ieee.org


内容を簡単に:
2値化CNNではバッチ正規化がより重要になりますが、そのためには学習パラメータのスケール、シフト量、平均値、分散を求め、学習率を調整する必要があります。
上記論文ではこれを代替するバイアス値を確認し、バッチ正規化フリーのBinaryNetをシミュレートしていきます。

感想:
この英語論文めっちゃわかりやすい!
とおもったら筆者日本人だった、ナルホド