我正在尝试使用 encog 库作为强化学习问题的函数逼近器。更准确地说,我正在尝试启动并运行一个多层感知器(BasicNetwork)。
由于我的代理会基于我选择的任何 RL 算法以某种方式探索世界,因此我无法预构建任何 BasicNeuralDataSet,如 XOR example 所示。 Probably ,我必须使用 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,但两者似乎都缺乏真正的在线学习,只要有新样本可用就可以触发训练(也必须可以在任何时间对样本进行分类)
最佳答案
抱歉回复慢。基本上,这听起来像是您要求在线培训。也就是说,您只需呈现一个案例,神经网络权重就会立即更新。这样就不需要创建整个训练集,您只需根据需要进行训练。不幸的是,Encog 对此没有很好的支持。它已成为一个常见问题,我计划在下一个版本中添加它。
目前,您唯一可以做的方法是创建一个包含单个项目的训练集,然后进行单次迭代训练。
编辑
从 Encog 3.2 开始添加了在线培训。有关更多信息,请参阅此常见问题解答。
http://www.heatonresearch.com/faq/5/3
关于java - Encog:BasicNetwork:没有预先构建的数据集的在线学习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13126413/