【VBA編】設計
前回まででデータの読み込み処理の作成が完了しました。
今回からは実際にニューラルネットワークを作るフェーズに移っていきます。
その前に、どのように実装するかを簡単に見ていきましょう。
以前の記事もあわせて参考にしてください。
celaeno42.hatenablog.com
作成するニューラルネットワークのイメージ
今回作成するニューラルネットワークは、入力層1層、隠れ層2層、出力層1層からなり、それぞれを「classInputLayer(入力層クラス)」「classHiddenLayer(隠れ層クラス)」「classOutputLayer(出力層クラス)」(のインスタンス)として実装します。
入力層では「がくの長さ」「がくの幅」「花弁の長さ」「花弁の幅」の4つの入力を受け取る必要があるため、「classInputUnit(入力ユニットクラス)」を4つ定義します。
隠れ層1層めと2層めのユニット数は任意ですが、ここではそれぞれ3つと4つにしており、それぞれを「classUnit(ユニットクラス)」で定義します。
出力層では「Iris-setosa」「Iris-versicolor」「Iris-virginica」の3種類に分類するので、ユニットを3つ、「classUnit(ユニットクラス)」で定義しています。
入力層のユニットと隠れ層、出力層のユニットの実装クラスが異なるのは、入力層では入力値をそのまま次の層(隠れ層)に渡すだけで、特に演算等が不要なためです。
また、全体を通しての制御などは標準モジュールに「mdlSupervisor」モジュールを作成して行います。
他に、活性化関数の演算などは標準モジュールに「ML」モジュール(マシンラーニング用モジュール)を作成して行います。
では、必要な準備を整えておきましょう。
モジュールとシートの追加
上記であげた標準モジュール、クラスモジュールを追加しましょう。
今回追加するモジュールは以下の通りです。
【標準モジュール】
オブジェクト名 | 用途 |
---|---|
mdlSupervisor | 全体の制御に使用 |
ML | マシンラーニングの演算に使用 |
【クラスモジュール】
オブジェクト名 | 用途など |
---|---|
classInputLayer | 入力層の管理に使用 |
classHiddenLayer | 隠れ層の管理に使用 |
classOutputLayer | 出力層の管理に使用 |
classInputUnit | 入力用ユニット |
classUnit | 隠れ層、出力層用ユニット |
また、今後必要となるシートもあわせて追加しておきましょう。
シートはオブジェクト名も変えておくのを忘れないでください。
今回追加するシートは以下の通りです。
オブジェクト名 | シート名 | 用途 |
---|---|---|
ws_Test_Result | テスト結果 | テスト結果の出力に使用 |
ws_Train_Result | 訓練結果 | 訓練結果の出力に使用 |
ws_W_H1 | w_h1 | 隠れ層1層めの重みの出力に使用 |
ws_W_H2 | w_h2 | 隠れ層2層めの重みの出力に使用 |
ws_W_Out | w_out | 出力層の重みの出力に使用 |
ws_WI_H1 | wi_h1 | 隠れ層1層めの重みの初期値の出力に使用 |
ws_WI_H2 | wi_h2 | 隠れ層2層めの重みの初期値の出力に使用 |
ws_WI_Out | wi_out | 出力層の重みの初期値の出力に使用 |
すべて追加するとこのようになります。
いよいよ次回からはニューラルネットワークのコードを書いていきます。