我正在尝试将 encog 库用作强化学习问题的函数逼近器。更准确地说,我正在尝试启动并运行一个多层感知器(BasicNetwork)。由于我的代理会根据我选择的任何 RL 算法以某种方式探索世界,因此我无法预构建任何 BasicNeuralDataSet,如XOR 示例中所示。可能,我必须使用 pause() 和 resume() 函数,但由于我找不到任何关于这些的文档或示例,所以我对如何使用这些功能有些迷茫(如果它们甚至在我的版本中工作的话。我不太懂在阅读第二个链接中问题的答案后确定)。
我正在使用 Java 和 encog-core-2.5.3 jar。我目前的方法如下所示:
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null, true,2));
network.addLayer(new BasicLayer(new ActivationTANH(), true,4));
network.addLayer(new BasicLayer(new ActivationTANH(), true,1));
network.getStructure().finalizeStructure();
network.reset();
TrainingContinuation cont = null;
double error = 0;
do {
int rnd = random.nextInt(trainInputs.length);
NeuralDataSet trainingSet = new BasicNeuralDataSet(
new double[][] { trainInputs[rnd] },
new double[][] { trainOutputs[rnd] });
Backpropagation train = new Backpropagation(network, trainingSet);
// train the neural network
if (cont != null) {
train.resume(cont);
}
train.iteration();
cont = train.pause();
error = train.getError();
} while (error > 0.01);
这显然是一个最小的例子,我只是从玩具样本(XOR)中抽取随机数据点。发生的情况是 MLP 不收敛。日志记录向我显示完全随机的错误,所以我假设培训师正在被重置并且我的暂停/恢复方法没有正确实施。
PS:由于我不受 Encoq 约束,但可以使用任何框架,因此我也很欣赏满足我要求的示例代码。到目前为止,我尝试过 Weka 和 Neuroph,但两者似乎都缺乏真正的在线学习,只要有新样本可用就可以触发训练(也必须可以在任何时候对样本进行分类)