●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層目に進みます。 |
次のページへ
目次へ戻る |