9-05 Affine2層目で「畳み込みニューラルネットワーク」は終わり

 このアーカイブはAffine2層目のModelSim(使い方はここ)プロジェクトです。

●AINから演算結果が順に10個出てくる

 tb_conv_hw/conv_hw_1のAINを見てみましょう。図9-25のように-479, -202, ... -260まで、合計
10個出てきます。


  図9-25 ModelSimのWaveformでAINの波形を見る


●affine_layer12.xlsmの演算結果と比較

 EXCELで計算した結果と比較しましょう。9-26のa8行の10個と上図のAINが
ピタリ一致しています。またanswerが””であり、上図のANSWERと一致しています。



  図9-26 affine_layer12.xlsmのa8とanswer


●Affine2層目は演算量が少ない

 Affine2層目の重み行列は50×10なので、乗算器1個で順次計算したとしても500サイクル程度で終わります。図9-25をみると判定回路も含めて
8us以下で終わっており(クロック周期10ns)、このままパイプライン化しても問題ありません。


●畳み込み1〜6、Affine1〜2層までのサイクル数のバランスを見る

 第6章で畳み込み1層目、第7章で2層目、第8章で3〜6層目、本章ではAffine1〜2層目をVHDL化しました。各層のサイクル数と時間をと比較したものを表9-01に示します。

    表9-01 各層にかかる時間(MNIST画像1枚あたり、1サイクル = 10ns)
畳込1層目 畳込2層目 畳込3層目 畳込4層目 畳込5層目 畳込6層目 Affine1層目 Affine2層目
サイクル数 7.1k 7.1k 7.2k 9.3k 9.7k 9.8k 8.2k 0.8k
時間 71us 71us 72us 93us 97us 98us 82us 8us
乗算器(個) 16 256(ビットシフト型) 128(ビットシフト型) 256(ビットシフト型) 128(ビットシフト型) 256(ビットシフト型) 7 1

パイプライン化すると98usごとに推論結果が得られる

 上表をみるとAffine2層目は飛びぬけて早く終わりますが、その他の層は7.1k〜9.8kサイクルの間に収まっており、まずまず効率的なパイプライン化が出来そうです。その際、スループット(推論結果が出てくる周期)は一番遅い
9.8kサイクルになります(畳み込み6層目がペースメーカーになる)。



●キーワードは整数化と自動化と規則性

 「畳み込みニューラルネットワーク」は畳み込み1〜6層、その後Affine1〜2層と多層にわたり複雑ですが、所詮は
整数の掛け算と足し算です。言語がPythonからVHDLに変わっても結果が変わる理由はありません。
 また重み係数が多く、VHDLファイル数が膨大になりますが、VBAなどで
自動生成すればそれほど手間はかかりません。
 また、各層の回路には「
強い規則性」があるので、ひな形のVHDLを作ってしまえば後は微調整で済みそうです。


目次へ戻る