c # Encog Framework, нейронная сеть. Почему при обучении сети возникает внутренняя ошибка? - PullRequest
0 голосов
/ 03 октября 2018

Я следую инструкциям, приведенным в книге «Использование 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

Заранее спасибо :)

1 Ответ

0 голосов
/ 17 октября 2018

Для других, ищущих решения для этого типа проблемы:

Я решил это, изменив 'var', когда объявил новые переменные, и это, казалось, решило мою проблему.спасибо GunnarSigfusson за ответ, который исправил это c:

...