Encog входной размер слоя Ошибка?

1

Поэтому я новичок в Encog, и я последовал за входом в Mr.Heaton в 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. Помогите мне, спасибо, спасибо!

Теги:
neural-network
encog

1 ответ

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 нейронах.

Ваша сеть выглядит так:

Изображение 174551

Я отметил входы без сигнала на красный. Поскольку вы используете только одну переменную, вам нужно уменьшить свой уровень ввода до 1. Еще одна вещь, которая неверна в вашем коде, - это отсутствие нормализации. Вы получаете вход в диапазоне (0-100) и ожидаете выход в диапазоне (0-100). Набор результатов функции сигмоида - это форма от 0 до 1, поэтому перед обучением вашей сети вам необходимо нормализовать набор тренировок. Не забудьте нормализовать вывод, когда вы проверите свою сеть. Вы можете сделать это с помощью NormalizeArray

Ещё вопросы

Сообщество Overcoder
Наверх
Меню