【问题标题】:Encog input layer size Error?Encog输入层大小错误?
【发布时间】:2014-10-29 13:44:15
【问题描述】:

所以我是 Encog 的新手,我按照 Mr.Heaton 对 Encog in C# 的介绍进行了尝试。我的简单练习是开发一个网络,根据一个人的年龄预测他们的“精神错乱程度”,我提供了一个训练集。但是,我发现自己面临这个问题:

“输入层大小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 在教程中讨论的代码相同。请帮帮我,谢谢!

【问题讨论】:

    标签: c# .net neural-network encog


    【解决方案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,作为输出,您需要一个 insanity level 数字。在您的代码中,您创建了期望 6 个信号作为输入的网络,但您只提供了一个 age 并且 Encog 不知道其他 5 个神经元上应该是什么信号。

    您的网络如下所示:

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

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 2021-05-20
      • 2021-03-06
      相关资源
      最近更新 更多