5層目を計算するためには4層目の計算が終了していること!

 5層目はこのファイル(conv_layer5.xlsm)のVBAを実行してEXCELシートを生成しますが、それには
条件があります。

@前節で使用したconv_layer4.xlsmがconv_layer5.xlsmと同じディレクトリに存在すること。
A前節で使用したconv_layer4.xlsmのVBAマクロをすべて実行していること。

B前節で使用したconv_layer4.xlsmを保存して閉じていること。

●入力画像はVBAで4層目から転写する

 それではconv_layer5.xlsmを開いてみましょう。シートが1枚(W5_Bias)だけあります。肝心の入力画像がありませんが、それらはVBAマクロを実行してconv_layer4.xlsmから
転写して自動生成します。

 まずは図8-30のように「開発」タブからVisual Basicをクリックしましょう。



  図8-30 開発タブからVisual Basic


●VBAマクロを開いて走らせる

 左枠のVBA ProjectからModule1をダブルクリックすると図8-31のように
Sub layer5_inから始まるVBAマクロが現れます。三角マークをクリックして実行しましょう。



  図8-31 VBAを起動してモジュールを開きマクロを実行


●入力画像は前層のEXCELの結果を転写したもの

 すると入力画像のシート32枚が自動生成されます(図8-32)。これらは4層目の結果であり、conv_layer4.xlsmから転写されたものです。畳み込み4層目の結果はこのように8x8画素ですが、それらをパディングして
10x10画素にしたものが5層目の入力となります。



  図8-32 5層目の入力画像が32枚生成される。4層目の出力と比べてみよう

●8個のVBAマクロを順番に実行する

 その後は4層目と同じようにひたすらVBAマクロを実行します。表2-02の
順にすべて実行してください。

  表2-02 VBAマクロ一覧
モジュール名 マクロ名 機能 シートの数
Module1 Sub layer5_in 入力画像生成(前層から転写) 32
Module2 Sub layer5_im2col im2col関数 32
Module3 Sub layer5_mmult 行列乗算 32
Module4 Sub layer5_all 32シートの加算 1
Module5 Sub layer5_truncate 8ビット右シフト(1/256) 1
Module6 Sub layer5_plus バイアス加算 1
Module7 Sub layer5_relu ReLU関数+255でリミッタ 1
Module8 Sub layer5_out 64チャネルに分割 64

●重み係数とバイアスのシートだけはPythonからコピペしたもの

 最初のシート(W5_Bias)には重み係数とバイアスがあります。これはPythonからCSV形式で書き出したものをコピペしたものです(図8-33)。縦方向に288個ありますが、これはこの層の入力が32チャネルあることによります(9×32)。横方向には64個ありますが、これはこの層の出力が64チャネルになるということです。



  図8-33 シートW5_Biasは5層目の重み係数とバイアスがある


5層目の結果は8×8画素になる

 図8-34はVBAマクロModule8, Sub layer5_outを実行した結果で、outCh00〜63の
64枚あります。それぞれ8×8画素からなります。



  図8-34 マクロModule8, Sub layer5_outを実行すると64チャネル得られる


●Pythonで実行した結果と比較する

 図8-35は
Pythonで5層目を実行した結果です。EXCELで計算したものとピタリ一致しています。全部で64チャネルあるので皆一致することを確認します。



  図8-35 PythonをAnaconda Jupyter Labで走らせた結果

●5層目には「プーリング」はありません。次は6層目に進みます。

次のページへ


目次へ戻る