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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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