我正在尝试使用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不会收敛。记录显示我完全随机错误,所以我假设教练正在重置,我的暂停/恢复方法没有正确实现。
P.S .: 这是this问题的精确副本。由于杰夫·希顿似乎是唯一一个回答问题的人,所以要么你需要等待数周才能得到答复,要么根本就没有答复。我希望也不要气馁在这里问。
P.P.S .: 由于我不受Encoq的约束,但可以使用任何框架,我也很欣赏满足我要求的示例代码。到目前为止,我尝试过Weka和Neuroph,但两者似乎都缺乏真正的在线学习,只要有新样本,就可以触发培训(必须在任何时间对样本进行分类)
答案 0 :(得分:8)
抱歉回复缓慢。基本上,这听起来像是在要求在线培训。那就是你只呈现一个案例,并立即更新神经网络权重。这样就没有必要创建一个完整的训练集,只需要根据需要进行训练。不幸的是,Encog对此没有很好的支持。它已经成为一个经常被问到的问题,我打算在下一个版本中添加它。
目前,关于你能做到的唯一方法是创建一个包含单个项目的训练集,然后训练一次迭代。
修改强> 从Encog 3.2开始添加在线培训。有关详细信息,请参阅此FAQ。