我按照《 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行
提前致谢 :)
最佳答案
对于寻求此类问题解决方案的其他人:
我通过在声明新变量时更改'var'来解决此问题,这似乎解决了我的问题。
感谢GunnarSigfusson修复它的答案c: