C# 编码输入层大小错误?

C# 编码输入层大小错误?,c#,.net,neural-network,encog,C#,.net,Neural Network,Encog,所以我对Encog是新手,我跟随希顿先生介绍了C#中的Encog,并尝试了一下。我的简单练习是开发一个网络,根据年龄预测一个人的“精神错乱程度”,我提供了一套培训。然而,我发现自己面临着这个问题: “输入层大小6必须与培训输入大小1匹配。” 我肯定我在某个地方犯了一个大错误,这是我的简单代码 public static double[][] InsanityInput = { //age new double[1]{20}, new double[1]{25},

所以我对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();
 }
public static double[][]InsanityInput=
{
//年龄
新的双[1]{20},
新的双[1]{25},
新的双[1]{30},
新的双[1]{35},
新的双[1]{40},
新的双[1]{45}
};   
public static double[][]疯狂交易=
{
//精神错乱水平
新的双[1]{100},
新的双[1]{90},
新的双[1]{75},
新的双[1]{60},
新的双[1]{30},
新的双[1]{20}
};
静态void Main(字符串[]参数)
{
基本网络=新的基本网络();
AddLayer(新的BasicLayer(新的ActivationSigmoid(),true,6));//输入层
AddLayer(新的BasicLayer(新的ActivationSigmoid(),true,6));//隐藏层
AddLayer(新的BasicLayer(新的ActivationSigmoid(),true,1));//输出层
network.Structure.FinalizeStructure();
Reset();
INeuralDataSet trainingSet=新的基本EURALDataset(InsanityInput,InsanityIDEAL);
ITrain train=新的弹性传播(网络、培训集);
int epoch=1;
做
{
train.Iteration();
Console.WriteLine(“Epoch#“+Epoch+”错误:“+train.Error”);
epoch++;
}而((0.001));
double[]inputArray={27};//输入年龄
INeuralData inputData=新的基本EURALDATA(输入阵列);
INeuralData outputData=网络.Compute(输入数据);
Console.WriteLine(“\n网络预测:+outputData.ToString());
Console.ReadKey();
}

事实上,这与希顿先生在教程中讨论的代码相同。请帮帮我,谢谢

短:

线

洛克应该这样吗

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

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

您的网络如下所示:

我将无信号输入标记为红色。因为您只需要增加一个变量,所以需要将输入层减少到1。 代码中的另一个错误是缺少。您获得范围(0-100)内的输入,并期望范围(0-100)内的输出。结果集的形式为0到1,所以在训练网络之前,您需要规范化训练集。在测试网络时,请记住规范化输出。你可以用任何方法来做

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