Я не получить шанс взглянуть на adapt
функцию, но я подозреваю, что это обновление, а не перезаписывать. Чтобы проверить это утверждение, вам может потребоваться выбрать подмножество вашего первого фрагмента данных в качестве второго фрагмента в процессе обучения. Если он переписывается, когда вы используете обученную сеть с подмножеством для проверки вашего первого блока данных, предполагается, что он плохо прогнозирует данные, которые не относятся к подмножеству.
Я проверил его с помощью очень простой программы: тренируйте кривую y=x^2
. Во время первого тренировочного процесса, я узнал набор данных [1,3,5,7,9]
:.
m=6;
P=[1 3 5 7 9];
T=P.^2;
[Pn,minP,maxP,Tn,minT,maxT] = premnmx(P,T);
clear net
net.IW{1,1}=zeros(m,1);
net.LW{2,1}=zeros(1,m);
net.b{1,1}=zeros(m,1);
net.b{2,1}=zeros(1,1);
net=newff(minmax(Pn),[m,1],{'logsig','purelin'},'trainlm');
net.trainParam.show =100;
net.trainParam.lr = 0.09;
net.trainParam.epochs =1000;
net.trainParam.goal = 1e-3;
[net,tr]=train(net,Pn,Tn);
Tn_predicted= sim(net,Pn)
Tn
Результата (обратите внимание, что выход масштабируется с той же ссылкой Если вы делаете стандартную нормализацию, убедитесь, что вы всегда наносите среднее и значение станд с 1-го обучающего набора для всех остальных):
Tn_predicted =
-1.0000 -0.8000 -0.4000 0.1995 1.0000
Tn =
-1.0000 -0.8000 -0.4000 0.2000 1.0000
Сейчас мы реализуем второй процесс обучения, с учебными данными [1,9]
:
Pt=[1 9];
Tt=Pt.^2;
n=length(Pt);
Ptn = tramnmx(Pt,minP,maxP);
Ttn = tramnmx(Tt,minT,maxT);
[net,tr]=train(net,Ptn,Ttn);
Tn_predicted= sim(net,Pn)
Tn
Результат:
Tn_predicted =
-1.0000 -0.8000 -0.4000 0.1995 1.0000
Tn =
-1.0000 -0.8000 -0.4000 0.2000 1.0000
Обратите внимание, что данные с x=[3,5,7];
до сих пор точно предсказаны.
Однако, если мы тренируем только x=[1,9];
с самого начала:
clear net
net.IW{1,1}=zeros(m,1);
net.LW{2,1}=zeros(1,m);
net.b{1,1}=zeros(m,1);
net.b{2,1}=zeros(1,1);
net=newff(minmax(Ptn),[m,1],{'logsig','purelin'},'trainlm');
net.trainParam.show =100;
net.trainParam.lr = 0.09;
net.trainParam.epochs =1000;
net.trainParam.goal = 1e-3;
[net,tr]=train(net,Ptn,Ttn);
Tn_predicted= sim(net,Pn)
Tn
Смотреть результат:
Tn_predicted =
-1.0071 -0.6413 0.5281 0.6467 0.9922
Tn =
-1.0000 -0.8000 -0.4000 0.2000 1.0000
Примечания тренированной сетка не работает хорошо на x=[3,5,7];
Тест выше означает, что обучение основано на предыдущей сети вместо перезапуска. Причина, по которой вы ухудшаете производительность, - это реализовать только один раз для каждого блока данных (стохастический градиентный спуск, а не спуск градиента партии), поэтому общая кривая ошибок может еще не сходиться. Предположим, что у вас есть только два блока данных, вам может потребоваться переучивать кусок 1 после завершения учебного куска 2, затем переучивать кусок 2, затем кусок 1, так далее и т. Д. До тех пор, пока не будут выполнены некоторые условия. Если у вас гораздо больше кусков, вам может не понадобиться беспокоиться о 2-м по сравнению с 1-м эффектом тренировки. Онлайн-обучение просто выкидывает предыдущий набор данных независимо от того, компрометируют ли их обновленные веса.
Как сделать y ou знает, что это перезапись вместо обновления? Можете ли вы показать пример данных, так как я не совсем понимаю, что вы подразумеваете под «В каждой итерации он обновляет сеть в зависимости от только подготовленного набора данных»? Спасибо – lennon310
Я использую нейронную сеть во временных рядах, чтобы предсказать несколько точек (90). Если я использую train(), на каждой итерации он перезаписывается в уже подготовленную часть. Я наблюдаю это за счет сравнения моих предсказанных значений и фактических значений. Со временем улучшения не было, и мои прогнозы были основаны только на обученной небольшой части данных. Вместо того, чтобы тренировать 1 000 000 точек данных, более эффективно тренировать его итерационно, я думаю. В настоящее время я пытаюсь функция adapt(), но я не вижу улучшения в моих прогнозах. Это был мой вопрос // это возможно с помощью adapt(). Спасибо. – Alper
Прогнозы основаны только на обученных данных. В каждой моей итеративной тренировке я не смогу увидеть образец или поведение ранее подготовленных данных. – Alper