c#Encog Framework,神经网络,训练网络时为什么会出现内部错误?

时间:2018-10-03 08:10:31

标签: c# machine-learning encog

我正在按照“ Use Encog c#”一书中的说明进行操作,在该说明中,我不得不重新设计一些代码以满足我的需要。

我正在处理图像数据集,我一次将一个“类别”加载到网络中,对其进行训练,保存并在控制台程序中继续进行下一个“类别”。

这是我创建神经网络的方式:

  public BasicNetwork CreateNetwork(ImageMLDataSet training)
    {
        var network = EncogUtility.SimpleFeedForward(training.InputSize, 100, 0, training.IdealSize, true);

        return network;
    }

和我的训练集: imageDict是一个Dictionary变量

 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”为我的图像分配ID(在我的情况下是字典而不是类) 并将其处理为ImageMLData。

当'EncogUtility.TrainConsole(train,network,training,minutes);'时,此方法中发生错误。叫做。

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:嵌套异常--->   System.NullReferenceException:对象引用未设置为   对象的实例   Encog.MathUtil.Error.ErrorCalculation.UpdateError(Double []实际,   IMLData理想,双重意义)   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火车,   BasicNetwork网络,IMLDataSet trainingSet(双秒)位于   TreeSorting.NeuralNetwork.TrainNetwork(基本网络,   IMLDataSet培训)在C:\ Dokumenter \ Monosoft \ Monosoft中   Project \ ConsoleApp1 \ NeuralNetwork.cs:第180行

先谢谢您了:)

1 个答案:

答案 0 :(得分:1)

对于正在寻找此类问题的解决方案的其他人:

我通过在声明新变量时更改'var'来解决此问题,这似乎解决了我的问题。 感谢GunnarSigfusson提供的修复问题的答案: