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が”7”であり、上図の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を作ってしまえば後は微調整で済みそうです。 |
目次へ戻る |