我是机器学习的新手,我正在研究一个使用其图像对对象进行分类的Java应用程序。我有40个输入神经元和n个输出神经元(取决于训练数据的数量)。我使用Encog作为我的神经网络的框架。我能够成功地训练数据但是当我测试网络时,它似乎不能很好地工作。它无法正确分类对象。 这是培训部分:
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null,true,i));
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,h));
network.addLayer(new BasicLayer(new ActivationSigmoid(),false,o));
network.getStructure().finalizeStructure();
network.reset();
// train the neural network
final Backpropagation train = new Backpropagation(network, trainingSet, lr, 0.3);
train.fixFlatSpot(false);
w = new SwingWorker(){
@Override
protected Object doInBackground() throws Exception {
// learn the training set
int epoch = 1;
do {
train.iteration();
//System.out.println("Epoch #" + epoch + " Error:" + train.getError());
epoch++;
} while(train.getError() > me && !isStop);
isStop = false;
return null;
}
};
w.execute();
和测试部分:
BasicNetwork network = (BasicNetwork) SerializeObject.load(new File("file/Weights.ser"));
MLData input = new BasicMLData(inputCount);
input.setData(in);
MLData output = network.compute(input);
for(int y = 0; y < output.size(); y++){
System.out.println(output.getData(y));
}
训练部分有问题吗?如果我以正确的方式做事,我希望有人可以指导我。
答案 0 :(得分:3)
您的意思是当您尝试识别您训练过的完全相同的数据时,您无法识别它吗?如果是这种情况,那么我会假设你为测试与训练编码图像的方式有所不同。
如果您看到的数据与您训练的数据不同,那么这是一个不同的(也是常见的)问题。这意味着训练数据可能无法代表整个问题空间。即,您正在使用的新数据与未进行匹配的训练数据不同。