4

我正在尝试将 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,但两者似乎都缺乏真正的在线学习,只要有新样本可用就可以触发训练(也必须可以在任何时候对样本进行分类)

4

1 回答 1

8

抱歉回复慢。基本上,听起来您要求进行在线培训。也就是说,您只需提出一个案例,神经网络权重就会立即更新。这样就不需要创建整个训练集,您只需根据需要进行训练。不幸的是,Encog 对此没有很好的支持。它已经成为一个常见问题,我计划在下一个版本中添加它。

目前,您可以做到的唯一方法是创建一个包含单个项目的训练集,然后训练一次迭代。

EDIT 从 Encog 3.2 开始添加在线培训。有关更多信息,请参阅此常见问题解答。

http://www.heatonresearch.com/faq/5/3

于 2013-04-20T20:01:47.510 回答