11‐05 6層目シミュレーションとEXCELの答え合わせ

●6層目の積和結果を判定回路に入力

 
図11‐50(a)はシミュレーションを2.727msほど走らせた辺りの信号を見ています。gts_hw/conv_layer6/mac_00を見ると左から -20655, -14352, -16256... となっています。

図11-50 (a) 6層目出力→判定回路入力 2.727msあたり

図11‐50 (b) 6層目出力→判定回路入力 2.761msあたり。AINの最大値は293、NUMBERは26

●積和演算が合っているかはEXCELと比較

 図11‐51(a)は6層目のEXCELファイル(TS_layer6.xlsm)の
Calculateシートです。Drop5*W6の行が6層目の行列乗算結果で、結果的に43個のデータが得られます。
 その行を図11‐50(a)の
mac_00と比較するとピタリ一致しています。またplusBias6の行もシミュレーションのplusBias_00信号と一致しています。

 EXCELのpllusBias6/64はシミュレーションの
AIN信号と一致しています。これは「判定回路」の入力信号で、図11‐50(b)の枠内、"293"が最大値で、図11‐51(b)でも293が最大になっています。その下のNUMBERはどちらも"26"で、これは「信号機あり」の標識のラベルです。

図11-51(a) Calculateシートと比較。Drop5*W6の行、43個がシムと一致している

図11-51(b) plusBias6/64の最大値は293、そのときのNUMBERは26

一つの積和演算器の一つの演算結果に注目

 図11‐51(a)の最初の-20655に注目し、その値を求める過程を見てみます。図11‐52はconv_layer6/dotpro_00(積和演算器)の信号です。
 同図の左の枠内PixRomData(画像データ)が3、MatRomData(重み係数)が-25、
mulout(乗算結果)が-75になっています。このように6層目はビットシフトではなく、「普通の乗算」を行います。6層目は係数も演算量も少ないので1個の乗算器で間に合うからです。

図11‐52 係数は符号付9ビット、‐256〜255までの値をとり得る

●6層目の入力は128個ある

 図11‐53では128サイクル(1280ns)かけて積和が行われ、MATMULOUT(mac_00と同じ信号)の右端に-20655が出ています。これはEXCEL(図11‐51(a))の最初の値と一致しています。

図11‐53 dotpro_00で128回の積和

●AINの最大値とその番号を探る判定回路

 図11‐54は判定回路内の信号です。MAXDATAが293、ANSWERが26なので最大値が293、そののラベル番号が26ということになります。

図11‐54 推論結果ANSWER(右端に26がある)

●整数での演算なのでPythonとピタリ一致する

 ここでEXCELとPythonの一致を見ているので、シミュレーションが
Pythonと一致したことになり、Pythonのプログラムが正しくHDL化されたということになります。
 6層にわたるニューラルネットワークでとても複雑に見えますが、所詮は整数の掛け算と足し算です。言語がPythonからHDLに変わっても結果が変わる理由はありません。丁寧にやれば必ず一致します。

目次へ戻る