1

だから私は Encog に不慣れで、Mr.Heaton の C# での Encog の紹介に従い、試してみました。私の簡単な演習は、年齢に応じて人の「狂気レベル」を予測するネットワークを開発することであり、トレーニング セットを提供しました。しかし、私はこの問題に直面しています:

「入力レイヤー サイズ 6 は、トレーニング入力サイズ 1 と一致する必要があります。」

どこかで大きな間違いを犯していると確信しています。これが私の簡単なコードです。

public static double[][] InsanityInput = 
{
     //age
     new double[1]{20},
     new double[1]{25},
     new double[1]{30},
     new double[1]{35},
     new double[1]{40},
     new double[1]{45}
};   
public static double[][] InsanityIDEAL = 
{
     //insanity level
     new double[1]{100},
     new double[1]{90},
     new double[1]{75},
     new double[1]{60},
     new double[1]{30},
     new double[1]{20}
};

static void Main(string[] args)
{
     BasicNetwork network = new BasicNetwork();
     network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 6)); //input layer
     network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 6)); //hidden layer
     network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 1)); //output layer
     network.Structure.FinalizeStructure();
     network.Reset();
     INeuralDataSet trainingSet = new BasicNeuralDataSet(InsanityInput, InsanityIDEAL);
     ITrain train = new ResilientPropagation(network, trainingSet);

     int epoch = 1;
     do
     {
         train.Iteration();
         Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error);
         epoch++;
     } while((epoch<5000)&&(train.Error > 0.001));

     double[] inputArray = {27}; //input the age
     INeuralData inputData = new BasicNeuralData(inputArray);
     INeuralData outputData = network.Compute(inputData);
     Console.WriteLine("\nNetwork Prediction: " + outputData.ToString());

     Console.ReadKey();
 }

実際、Mr.Heaton のチュートリアルで説明されているのと同じコードです。助けてください、ありがとう!

4

1 に答える 1

2

短い:

ライン

  network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 6)); //input layer

このように見えるはずです

  network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 1)); //input layer

どうして:

基本的なニューラル ネットワークと、実際には単層パーセプトロンを構築しています。入力として 1 つの値ageを指定し、出力として狂気レベルの1 つの数字を要求します。あなたのコードでは、入力として 6 つのシグナルを期待するネットワークを作成しますが、年齢を 1 つだけ指定したため、Encog は他の 5 つのニューロンにどのシグナルがあるべきかを知りません。

ネットワークは次のようになります。

間違ったグラフ

信号のない入力を赤でマークしました。変数を 1 つだけヒーブするため、入力層を 1 に減らす必要があります。コードのもう 1 つの問題は、正規化の欠如です。範囲 (0-100) で入力を取得し、範囲 (0-100) で出力を期待します。シグモイド関数の結果セットは 0 から 1 の形式であるため、ネットワークをトレーニングする前に、トレーニング セットを正規化する必要があります。ネットワークをテストするときは、必ず出力を正規化してください。NormalizeArrayでそれを行うことができます

于 2014-10-30T08:45:32.310 に答える