2014-10-29 2 views
1

그래서 Encog를 처음 접했고 Mr.Heaton의 Encog에 대한 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의 튜토리얼에서 논의 된 코드와 같습니다. 도와주세요, 고마워요!

답변

1

짧은 : 당신은 기본 신경망 사실을 구축

: 왜

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

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

는 다음과 같을해야

라인 Single Layer Perceptron. 입력 값으로 하나의 값인 을 제공하고 하나의 숫자로 의 정신 이상 등급이 필요합니다. 코드에서 6 개의 신호를 입력으로 예상하는 네트워크를 만들었지 만 하나만 으로 제공하고 Encog는 다른 5 개의 뉴런에 어떤 신호가 있어야하는지 모릅니다.

네트워크는 다음과 같습니다

Wrong graph

나는 빨간색으로 신호가없는 입력을 표시했다. 하나의 변수 만 가져야하므로 입력 레이어를 1로 줄여야합니다. 코드에서 잘못된 또 다른 사항은 normalization입니다. 범위 (0-100)에서 입력을 받고 범위 (0-100)에서 출력을 기대합니다. Sigmoid function 결과 세트는 0에서 1까지의 형식이므로 네트워크를 학습하기 전에 교육 세트를 정규화해야합니다. 네트워크를 테스트 할 때 출력을 표준화하는 것을 잊지 마십시오. 너는 할 수있어 NormalizeArray

관련 문제