■2層目
本企画でのニューラルネットワークは3層あります。1層目の演算結果は図2‐09のようにRAM_Z1.vhdに書き込んであり、それを読み出して2層目に入力します。アドレスは例によってカウンタで生成しますが、ここでは50進カウンタになります。
同図(b)のタイムチャートで分かるようにに2層目に入力されるデータはX0〜X49まで50個です。 |
図2‐09 1層目の結果が入ったRAMを読んで2層目に渡す部分
●重み行列ROMのアドレス生成
図2‐10に行列W2のROMのアドレス生成法を示します。図2‐09(a)で生成した50進カウンタ(CO50)を下位6ビットとします。
さらに100進カウンタを設けます。それは50進カウンタが最大値(49)になった時だけカウントアップし、それが上位7ビットになります。
図2‐10(b)にそのタイムチャートを示します。MatRomAddrの下位6ビットが0〜49までカウントアップされる間、上位7ビットは0を保ちます。
その後上位7ビットは1となり、下位6ビットは再び0〜49までカウントアップします。
重みW2ROM(ファイル名ROM_W2.vhd)の中には要素数50個のROMが100個あり、MatRomAddrの上位7ビットはそのROMの選択に使用されます。 |
図2‐10 重みのROMを読む部分
●積和演算の部分
画像ROMからの出力X_RD_DATAと、重みROMからの出力MatRomDataは図2‐11(a)に示すように乗算器に入力されます。
その後、加算器と遅延器によって累積され、積和演算結果が得られます。その仕組みは1層目と同じなので省略します。
同図(b)はタイムチャートです。加算結果addoutはCO50=1のタイミングでラッチされMATMULOUTとなります。これが行列乗算の最初の要素P0になります。P0,
P1, P2, ... , P99まで100個演算して終了します。 |
図2‐11 50要素を積和演算する。結果は100個になる
●バイアス加算→シグモイドで2層目終了
バイアス加算と疑似シグモイド関数の仕組みは1層目と同じなので省略します。
2層目の演算が終了したら、それを3層目に渡すためにいったんRAMに溜め込みます。この仕組みも1層目と同じなので省略します。 |
次のページへ
目次へ戻る
|