Encog输入图层大小错误?

时间:2014-10-29 13:44:16

标签: c# .net neural-network encog

所以我是Encog的新手,我跟着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教程中讨论的代码相同。请帮帮我,谢谢!

1 个答案:

答案 0 :(得分:1)

<强>短

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

应该喜欢这样

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

<强>为什么:

您正在建立基本的神经网络,事实上Single Layer Perceptron。作为输入,您提供一个值 age ,作为输出,您需要一个疯狂等级的数字。在您的代码中,您创建的网络需要6个信号作为输入,但您只提供了一个 age ,而Encog不知道其他5个神经元上应该有什么信号。

您的网络如下所示:

Wrong graph

我将没有信号的输入标记为红色。因为您只需要一个变量,所以需要将输入图层减少到1。  你的代码中另一个错误的是缺少normalization。您可以在范围(0-100)中获得输入,并期望输出范围(0-100)。 Sigmoid function结果集的格式为0到1,因此在训练网络之前,您需要规范化训练集。在测试网络时,请记住规范化输出。你可以NormalizeArray

来做