2

AForgeで遊んでいます。AForge Web サイトから例をコピーペーストしました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AForge;
using AForge.Neuro;
using AForge.Math;
using AForge.Neuro.Learning;

namespace NeuralNetTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // initialize input and output values
            double[][] input = new double[4][] {
                new double[] {0, 0}, new double[] {0, 1},
                new double[] {1, 0}, new double[] {1, 1}
            };

            double[][] output = new double[4][] {
                new double[] {0}, new double[] {1},
                new double[] {1}, new double[] {0}
            };
            Console.WriteLine("Tworzę sieć neuronową...");
            // create neural network
            ActivationNetwork network = new ActivationNetwork(
                new SigmoidFunction(2),
                2, // two inputs in the network
                2, // two neurons in the first layer
                1); // one neuron in the second layer
            // create teacher
            BackPropagationLearning teacher = new BackPropagationLearning(network);
            Console.WriteLine("Sieć neuronowa uczy się...");
            while (true)
            {
                double error = teacher.RunEpoch(input, output);
                if (error < 0.001) break;
            }
            Console.WriteLine("Uczenie sieci neuronowej zakończone.");
            Console.WriteLine("Sieć jest gotowa obliczać XOR.");

            while (true)
            {
                Console.WriteLine("Wpisz pierwszy bajt: (0 lub 1):");
                double f1 = (double)Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Wpisz drugi bajt: (0 lub 1):");
                double f2 = (double)Convert.ToInt32(Console.ReadLine());
                double[] netout = network.Compute(new double[2] { f1, f2 });
                Console.WriteLine("{0} XOR {1} to {2}.", (int)f1, (int)f2, netout[0]);
                Console.ReadLine();
            }
        }
    }
}

ご覧のとおり、2 ビットの XOR を計算できるはずです。でも。学習するとフリーズします!正常に動作していましたが、エラーが 0.26981832999407546 になるたびにフリーズします。

それは働いていた。そして今、ブーム、それは動作しません、一体何ですか? 前もって感謝します。

4

1 に答える 1

0

収束に失敗している可能性teacher.LearningRateがあります。デフォルト値が 0.1 の学習率をより低い数値に設定できます。

時間がかかるため、学習プロセス中にプログラムがフリーズすることに注意してください。別の別のスレッドでトレーニングを実行できます。

AForge.NET と Accord.NET を使用した良いデモがあります

于 2014-12-21T12:47:54.913 に答える