我正在按照“ 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行
先谢谢您了:)
答案 0 :(得分:1)
对于正在寻找此类问题的解决方案的其他人:
我通过在声明新变量时更改'var'来解决此问题,这似乎解决了我的问题。 感谢GunnarSigfusson提供的修复问题的答案: