10‐05 5層目シミュレーションとEXCELの答え合わせ
●5層目は16並列で出力128個計算
図10‐50はシミュレーションを2.42msほど走らせた辺り、tb_VideoProc/VideoProcCore/gts_hw/conv_layer5/MacShift_00〜15といった信号を見ています。 |
図10-50 16並列×8=128個の行列乗算結果
●積和演算が合っているかはEXCELと比較
5層目からは「全結合型ニューラルネットワーク」なります。図10‐51はそのEXCELファイル(TS_layer5.xlsm)のCalculateシートです。x_in * W5の行が5層目の行列乗算結果で、結果的に128個のデータが得られます。
その行を図10‐50のMacShift_00と比較すると、最初の8つまでがピタリ一致、その後の8つはMacShift_01と一致しています。その後の8つはMacShift_02... 最後の8つはMacShift_15と一致、全部で128個が一致しているのを確認します。 |
図10-51 Calculateシートと比較。x_in * W5の行、128個がシムと一致している
●一つの積和演算器の一つの演算結果に注目
図10‐51の最初の-736に注目し、その値を求める過程を見てみます。図10‐52はconv_layer5/dotpro_00(積和演算器)の信号です。
同図の左の枠内PixRomData(画像データ)が4、MatRomData(重み係数)が-1、mulout(乗算結果)が-4になっています。
右の枠内はPixRomDataが1、MatRomDataが0、muloutが1になっています。 |
図10‐52 係数は2ビット。11なら-1倍、00なら1倍
●係数の種類は4つに集約されている
5層目の係数は2ビットにエンコードされており、まとめると次の表のようになります。「本来乗算されるべき値」の1/16が乗算されています。 |
係数(2進) |
係数(10進) |
乗算される値 |
本来乗算されるべき値 |
01 |
1 |
4 |
64 |
00 |
0 |
1 |
16 |
11 |
-1 |
-1 |
-16 |
10 |
-2 |
-4 |
-64 |
表10‐01 乗算結果は本来の1/16の値になることに注意
●5層目の入力は2048個ある
図10‐53では2048サイクル(20480ns)かけて積和が行われ、MATMULOUT(mac_00と同じ信号)の右端に-46が出ています。 |
図10‐53 dotpro_xxで2048回の積和
●4ビット左シフトして16倍
図10‐54のようにHDLではmac_00を16倍してMacShift_00とします。各積和演算器で値が1/16なっている(表10‐01)のを相殺します。 |
図10‐54 conv_layer5.vhdの一部
●出力Ch0の結果をEXCELと比較
図10‐55の枠内、-46を16倍して‐736となり、EXCEL(図10‐51)の最初の値と一致します。 |
図10‐55 シミュレーションで最初のデータを確認
次のページへ
目次へ戻る
|