/// <summary> /// sin()関数の学習の例 /// <para>NeuralNetworkクラスを直接利用して関数近似を行わせるサンプルです。</para> /// <para> /// 2011/12/25現在、0~1までの出力しか得られない。 /// 出力関数と学習則を変更するか、関数近似時には値のマッピングが必要である。 /// 他の人はどうやってんだろう?</para> /// </summary> public static void sin_learnig() { var para = new Parameter(1, 13, 1, 3, 0.01); // ニューラルネットのパラメータ設定 var NNforSin = new NeuralNetwork(); // ニューラルネットクラスのインスタンス生成 NNforSin.Setup(para); for (int i = 0; i < 500; i++) // 学習開始 { Console.Write("\nnow i: " + i.ToString() + "@ "); Console.Write("ans = "); for (int k = 0; k < 15; k++) { double theta = (double)k / 15.0 * 2.0 * Math.PI; double ans = 0.0; for (int l = 0; l < 100; l++) ans = NNforSin.Learn(theta, Math.Sin(theta)); // 特徴ベクトルと教師ベクトルを渡す Console.Write(", " + ans.ToString("0.000")); } } NNforSin.Save("NN.ini"); return; }
/// <summary> /// XORの学習の例 /// <para>NeuralNetworkクラスを直接操作して論理演算を実行する例です。</para> /// </summary> public static void XOR_learning() { var para = new Parameter(2, 5, 1, 1, 0.1); // ニューラルネットのパラメータ設定(中間層が多いと、学習係数を小さくとる必要がある)7層が限界・・ var NNforXOR = new NeuralNetwork(); // ニューラルネットクラスのインスタンス生成 NNforXOR.Setup(para); for (int i = 0; i < 100; i++) // 学習開始 { var ans = new double[4]; Console.Write("now i: " + i.ToString() + "@ "); for (int k = 0; k < 100; k++) { ans[0] = NNforXOR.Learn(new double[2] { 0.0, 0.0 }, 0.0); // 特徴ベクトルと教師ベクトルを渡す ans[1] = NNforXOR.Learn(new double[2] { 0.0, 1.0 }, 1.0); ans[2] = NNforXOR.Learn(new double[2] { 1.0, 0.0 }, 1.0); ans[3] = NNforXOR.Learn(new double[2] { 1.0, 1.0 }, 0.0); } Console.WriteLine("ans = " + ans[0].ToString("0.000") + ", " + ans[1].ToString("0.000") + ", " + ans[2].ToString("0.000") + ", " + ans[3].ToString("0.000") + ", 最後の学習結果→Error variation," + NNforXOR.VariationOfError.ToString("0.000") + ", Total Error," + NNforXOR.TotalOutputError.ToString("0.000")); } NNforXOR.Save("NN.ini"); return; }