Encog: BasicNetwork: 在没有预构建数据集的情况下进行在线学习

我正在尝试使用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);    // 训练神经网络    if (cont != null) {        train.resume(cont);    }    train.iteration();    cont = train.pause();    error = train.getError();} while (error > 0.01);

这显然是一个最小的示例,我只是从一个玩具样本(XOR)中随机抽取数据点。结果是MLP没有收敛。日志显示完全随机的错误,所以我假设训练器在某种程度上被重置了,我的pause/resume方法没有正确实现。


附注:由于我不限于使用Encoq,可以使用任何框架,因此我也很感激能满足我需求的示例代码。到目前为止,我尝试过Weka和Neuroph,但两者似乎都缺乏真正的在线学习功能,无法在有新样本可用时触发训练(还必须能够在任何时间对样本进行分类)。


回答:

抱歉回复慢了。基本上,听起来你是在问关于在线训练的问题。也就是说,你只提供一个案例,神经网络的权重会立即更新。这样就不需要创建整个训练集,你只需按需训练。不幸的是,Encog在这方面支持得不好。这已经成为一个常见问题,我计划在下一个版本中添加这一功能。

目前,唯一可行的方法是创建一个只包含一个项目的训练集,然后进行一次迭代的训练。

编辑自Encog 3.2起,已添加在线训练功能。请参阅此常见问题解答以获取更多信息。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注