我研究了很多问题和示例,但似乎无法找出我的 RPROP NN 出了什么问题。这也是我第一次使用 Encog,所以我想知道这是否是我做错了。
我正在尝试通过输入图像(50x50)来训练网络识别猫,然后将其转换为灰度并向网络输入双精度 [] [] 和目标双 [] []。我注意到错误一直在 4.0,所以我在每次训练迭代时都执行了一个 dumpWeights() 以查看发生了什么。我注意到权重始终为零。然后我回到基础,看看我是否做对了,所以我针对 XOR 问题对其进行了修改:
//////////First created the network:
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null, true, 2));
network.addLayer(new BasicLayer(new ActivationBiPolar(), true, 2));
network.addLayer(new BasicLayer(new ActivationBiPolar(), false, 1));
network.getStructure().finalizeStructure();
network.reset();
//////Then created my data set and target vector (ideal vector) and fed it to a new RPROP training class:
final double targetVector[][] = { { -1 }, { 1.0 }, { 1.0 }, { -1 } };
final double inputData[][] = { { -1, -1 }, { 1.0, -1 },{ -1, 1.0 }, { 1.0, 1.0 } };
MLDataSet trainingSet = new BasicMLDataSet(inputData, targetVector);
final ResilientPropagation train = new ResilientPropagation(network, trainingSet);
///////train network
int epoch = 1;
do{
train.iteration();
System.out.println("Epoch #" + epoch + " Error : " + train.getError()) ;
epoch++;
System.out.println(network.dumpWeights());
}while(train.getError() > 0.01) ;
train.finishTraining();
System.out.println("End of training");
我得到以下输出,注意 0.0 的行是 network.dumpWeights() 方法的结果:
纪元 #132636 错误:2.0 0,0,0,0,0,0,0,0,0 纪元 #132637 错误:2.0 0,0,0,0,0,0,0,0,0 纪元 #132638 错误:2.0 0,0,0,0,0,0,0,0,0 纪元#132639 错误:2.0 0,0,0,0,0,0,0,0,0 纪元#132640 错误:2.0
... 等等。
有什么明显的你可以看到我在这里做错了吗?我还尝试了 2-3-1 架构作为 XORHelloWorld.java 示例的实现。
任何帮助将不胜感激。