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に変わっても結果が変わる理由はありません。丁寧にやれば必ず一致します。 |
目次へ戻る
|