/// <summary> /// 入力層・中間層・出力層のインスタンスを新規に生成するとともに、全ユニットを初期化する /// </summary> public void Init() { this.layer = new Layer(this.parameter, this.parameter.TotalLayer - 1); this.layer.LearningCoefficient = this.parameter.LearningCoefficient; return; }
// 3層以上と限定すれば、numOfPreLayerUnitは要らないんだけど2層も試したかったので導入した /// <summary> /// レイヤークラスのコンストラクタ /// <para>このクラスインスタンスを一つ生成すれば、入力層から出力層までを表現可能です。</para> /// <para> /// 本クラスを生成する際、numOfPreLayerUnitは0と設定することをお勧めします。 /// 0でなくともエラーは出ませんが、入力層には結合係数が定義されないためです。 /// </para> /// </summary> /// <param name="_parameter">ニューラルネットのパラメータ</param> /// <param name="_myLayerNum">層番号</param> /// <param name="numOfPreLayerUnit">前の層のユニット数(省略可能です。デフォルトでは0となります。)</param> public Layer(Parameter _parameter, int _myLayerNum, int numOfPreLayerUnit = 0) { this.parameter = _parameter; this.grossLayerNum = this.parameter.TotalLayer; this.myLayerNum = _myLayerNum; // ユニットの準備と、前層のユニット数を記憶する switch (this.MyKind) { case Kind.InputLayer: // 入力層 this.units = new Unit[this.parameter.NumOfUnitInInputLayer]; // 層の種類に合わせて、ユニット数を宣言する break; case Kind.HiddenLayer: // 中間層 this.units = new Unit[this.parameter.NumOfUnitInHiddenLayer]; break; case Kind.OutputLayer: // 出力層 this.units = new Unit[this.parameter.NumOfUnitInOutputLayer]; break; } for (int i = 0; i < this.units.Length; i++) this.units[i] = new Unit(numOfPreLayerUnit); // 前の層のユニット数だけ結合係数を生成させる this.preLayerUnitNum = numOfPreLayerUnit; // 前の層のユニット数を記憶しておく if (this.MyKind != Kind.OutputLayer) this.subsidiaryLayer = new Layer(this.parameter, this.myLayerNum - 1, this.units.Length); // 出力層以外なら子レイヤを生成 }