Я следую инструкциям, приведенным в книге «Использование Encog c #», где мне пришлось переделать часть кода в соответствии с моими потребностями.
Я работаю с наборами данных изображений, одновременно загружаю одну «категорию» в сеть, обучаю ее, сохраняю ее и перехожу к следующей «категории» в консольной программе.
Вот как я создаю свою нейронную сеть:
public BasicNetwork CreateNetwork(ImageMLDataSet training)
{
var network = EncogUtility.SimpleFeedForward(training.InputSize, 100, 0, training.IdealSize, true);
return network;
}
и мой обучающий набор: imageDict является переменной словаря
public ImageMLDataSet CreateTraining()
{
var downsample = new RGBDownsample();
var training = new ImageMLDataSet(downsample, false, -1, 1);
foreach (var item in imageDict)
{
ImageMLData data = new ImageMLData(item.Value);
training.Add(data);
}
Console.WriteLine("Training set created");
return training;
}
, после чего я присваиваю идентификаторы своимизображения с использованием 'ImagePair' (в моем случае это словарь, а не класс). И обрабатывает его в ImageMLData.
Ошибка возникает в этом методе, когда EncogUtility.TrainConsole (поезд, сеть, обучение, минуты);»называется.
public void TrainNetwork(BasicNetwork network, IMLDataSet training)
{
float minutes = 1;
double strategyError = 0.25;
int strategyCycles = 50;
Console.WriteLine("Training initiated...");
var train = new ResilientPropagation(network, training);
try
{
train.AddStrategy(new ResetStrategy(strategyError, strategyCycles));
EncogUtility.TrainConsole(train, network, training, minutes);
}
catch(Exception e)
{
Console.WriteLine("Error at: " + e);
}
Console.WriteLine("Training stopped");
}
Когда я запускаю это, я ловлю исключение:
Ошибка в: Encog.EncogError: Nested Exception ---> System.NullReferenceException: Ссылка на объект не установлена вэкземпляр объекта в Encog.MathUtil.Error.ErrorCalculation.UpdateError (Double [] фактический, IMLData идеально, двойное значение) ved Encog.Neural.Networks.Training.Propagation.GradientWorker.Process (пара IMLDataPair) в Encog.Neural.Networks.Training.Propagation.GradientWorker.Run () --- Шлюха работает с задним числом --- в Encog.Neural.Networks.Training.Propagation.Propagation.Iteration ()
в Encog.Util.Simple.EncogUtility.TrainConsole (поезд IMLTrain, базовая сеть, IMLDataSet trainingSet, двойные секунды) в TreeSorting.NeuralNetwork.TrainNetwork (базовая сеть, IMLDataSet обучение) в C: \ Dokumenter \ Monosoft \ Monosoft Project \ ConsoleApp1 \ NeuralNetwork.cs: строка 180 * 10 * 20
Заранее спасибо :)