Адаптировать нейронную сеть к данным по мере ее моделирования
[net,Y,E,Pf,Af,tr] = adapt(net,P,T,Pi,Ai)
Напечатать help network/adapt.
Эта функция вычисляет сетевые выходы и ошибки после каждого представления входных данных.
[net,Y,E,Pf,Af,tr] = adapt(net,P,T,Pi,Ai) берет
net | Сеть |
P | Сетевые входы |
T | Сетевые цели (по умолчанию = нули) |
Pi | Условия начальной задержки на входе (по умолчанию = нули) |
Ai | Условия задержки начального слоя (по умолчанию = нули) |
и возвращает следующее после применения функции адаптации net.adaptFcn с параметрами адаптации net.adaptParam:
net | Обновленная сеть |
Y | Сетевые выходы |
E | Сетевые ошибки |
Pf | Окончательные условия задержки на входе |
Af | Условия конечной задержки на уровне |
tr | Запись об обучении ( |
Обратите внимание, что T является необязательным и требуется только для сетей, для которых требуются целевые объекты. Pi и Pf также являются необязательными и должны использоваться только для сетей с задержками на входе или уровне.
adaptАргументы сигнала s могут иметь два формата: массив ячеек или матрица.
Формат массива ячеек проще всего описать. Это наиболее удобно для сетей с несколькими входами и выходами и позволяет представлять последовательности входов,
P |
| Каждый элемент |
T |
| Каждый элемент |
Pi |
| Каждый элемент |
Ai |
| Каждый элемент |
Y |
| Каждый элемент |
E |
| Каждый элемент |
Pf |
| Каждый элемент |
Af |
| Каждый элемент |
где
Ni | = | net.numInputs |
Nl | = | net.numLayers |
No | = | net.numOutputs |
ID | = | net.numInputDelays |
LD | = | net.numLayerDelays |
TS | = | Количество временных шагов |
Q | = | Размер партии |
Ri | = | net.inputs{i}.size |
Si | = | net.layers{i}.size |
Ui | = | net.outputs{i}.size |
Столбцы Pi, Pf, Ai, и Af упорядочены от самого старого условия задержки до самого последнего:
Pi{i,k} | = | Вход |
Pf{i,k} | = | Вход |
Ai{i,k} | = | Выход слоя |
Af{i,k} | = | Выход слоя |
Формат матрицы можно использовать, если необходимо смоделировать только один временной шаг (TS = 1). Это удобно для сетей только с одним входом и выходом, но может использоваться с сетями, которые имеют больше.
Каждый аргумент матрицы находится путем сохранения элементов соответствующего аргумента массива ячеек в одной матрице:
P | ( |
T | ( |
Pi | ( |
Ai | ( |
Y | ( |
E | ( |
Pf | ( |
Af | ( |
Здесь две последовательности из 12 шагов (где T1 известно, что зависит от P1) используются для определения работы фильтра.
p1 = {-1 0 1 0 1 1 -1 0 -1 1 0 1};
t1 = {-1 -1 1 1 1 2 0 -1 -1 0 1 1};
Здесь linearlayer используется для создания слоя с диапазоном ввода [-1 1], один нейрон, задержки ввода 0 и 1 и скорость обучения 0,1. Затем моделируют линейный слой.
net = linearlayer([0 1],0.1);
Здесь сеть адаптируется для одного прохода через последовательность.
Отображается среднеквадратичная ошибка сети. (Потому что это первый звонок adapt, значение по умолчанию Pi используется.)
[net,y,e,pf] = adapt(net,p1,t1); mse(e)
Обратите внимание, что ошибки довольно велики. Здесь сеть адаптируется к другим 12 временным шагам (используя предыдущий Pf как новые начальные условия задержки).
p2 = {1 -1 -1 1 1 -1 0 0 0 1 -1 -1};
t2 = {2 0 -2 0 2 0 -1 0 0 1 0 -1};
[net,y,e,pf] = adapt(net,p2,t2,pf);
mse(e)
Здесь сеть адаптируется для 100 проходов через всю последовательность.
p3 = [p1 p2]; t3 = [t1 t2]; for i = 1:100 [net,y,e] = adapt(net,p3,t3); end mse(e)
Погрешность после 100 проходов через последовательность очень мала. Сеть адаптирована к соотношению между входным и целевым сигналами.
adapt вызывает функцию, указанную net.adaptFcn, используя значения параметров адаптации, указанные net.adaptParam.
Дана входная последовательность с TS шаги, сеть обновляется следующим образом: каждый шаг в последовательности входов представляется сети по одному. Значения веса и смещения сети обновляются после каждого шага перед представлением следующего шага в последовательности. Таким образом, сеть обновляется TS времена.