如何在Matlab中增量训练神经网络并迭代合并它们

我有一个非常大的训练集,需要进行大规模训练。

是否可以将训练集分成几部分,然后迭代地训练网络,并在每次迭代中更新“net”,而不是覆盖它?

下面的代码展示了这个想法,但它不会工作。在每次迭代中,它仅根据已训练的数据集更新网络。

TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';% 传输函数的层,TF3 是输出层的传输函数net = newff(trainSamples.P,trainSamples.T,[NodeNum1,NodeNum2,NodeOutput],{TF1 TF2 TF3},'traingdx');% 创建网络net.trainfcn = 'traingdm' ; %'traingdm';net.trainParam.epochs   = 1000;net.trainParam.min_grad = 0;net.trainParam.max_fail = 2000; % 设为一个大值以表示无穷大while(1) // 每次迭代取10个数据点。 p %=> 用接下来的10个新数据点更新 t %=> 用接下来的10个新数据点更新 [net,tr]             = train(net, p, t,[], []);end

回答:

以下是如何在Matlab中迭代训练神经网络(小批量)的示例:

创建一个玩具数据集

[ x,t] = building_dataset;

小批量大小和数量

M = 420 imax = 10;

让我们比较直接训练与小批量训练

net = feedforwardnet(70,'trainscg');dnet = feedforwardnet(70,'trainscg');

标准训练:一次调用使用所有数据

dnet.trainParam.epochs=100;[ dnet tr y ] = train( dnet, x, t ,'useGPU','only','showResources','no');

错误度量:MEA,可以轻松测量MSE或任何其他你想要的度量

dperf = mean(mean(abs(t-dnet(x))))

这是迭代部分:每次调用一个epoch

net.trainParam.epochs=1;e=1;

直到达到之前方法的错误,以便比较epoch

while perf(end)>dperf

非常重要的是在每个epoch随机化数据!!

    idx = randperm(size(x,2));

用所有数据块迭代训练

    for i=1:imax        k = idx(1+M*(i-1) : M*i);        [ net tr ] = train( net, x( : , k ), t( : , k ) );    end

计算每个epoch的性能

    perf(e) = mean(mean(abs(t-net(x))))    e=e+1;end

检查性能,我们希望得到一个类似于准平滑和exp(-x)的曲线

plot(perf)

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中创建了一个多类分类项目。该项目可以对…

发表回复

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