Main Content

adapt

신경망을 시뮬레이션하며 데이터에 맞게 조정

구문

[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

신경망 목표값(디폴트 값 = 0)

Pi

초기 입력 지연 조건(디폴트 값 = 0)

Ai

초기 계층 지연 조건(디폴트 값 = 0)

그런 다음 적응 파라미터가 net.adaptParam인 적응 함수 net.adaptFcn을 적용한 후에 다음을 반환합니다.

net

업데이트된 신경망

Y

신경망 출력값

E

신경망 오차

Pf

마지막 입력 지연 조건

Af

마지막 계층 지연 조건

tr

훈련 기록(epochperf)

여기서 T는 선택 사항으로, 목표값이 필요한 신경망에서만 사용하면 됩니다. PiPf도 선택 사항으로, 입력 지연 또는 계층 지연이 있는 신경망에서만 사용해야 됩니다.

adapt 함수의 신호 인수는 셀형 배열이나 행렬의 형식을 가질 수 있습니다.

셀형 배열 형식이 표현하기 가장 쉬운 형식입니다. 입력값과 출력값이 여러 개인 신경망에서 사용하기에 가장 편리하며, 입력값의 시퀀스를 다음과 같이 표현할 수 있습니다.

P

Ni×TS 셀형 배열

각각의 P{i,ts} 요소는 Ri×Q 행렬입니다.

T

Nt×TS 셀형 배열

각각의 T{i,ts} 요소는 Vi×Q 행렬입니다.

Pi

Ni×ID 셀형 배열

각각의 Pi{i,k} 요소는 Ri×Q 행렬입니다.

Ai

Nl×LD 셀형 배열

각각의 Ai{i,k} 요소는 Si×Q 행렬입니다.

Y

No×TS 셀형 배열

각각의 Y{i,ts} 요소는 Ui×Q 행렬입니다.

E

No×TS 셀형 배열

각각의 E{i,ts} 요소는 Ui×Q 행렬입니다.

Pf

Ni×ID 셀형 배열

각각의 Pf{i,k} 요소는 Ri×Q 행렬입니다.

Af

Nl×LD 셀형 배열

각각의 Af{i,k} 요소는 Si×Q 행렬입니다.

여기서

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} =

시간 ts = k - ID에서의 입력값 i

Pf{i,k} =

시간 ts = TS + k - ID에서의 입력값 i

Ai{i,k} =

시간 ts = k - LD에서의 계층 출력값 i

Af{i,k} =

시간 ts = TS + k - LD에서의 계층 출력값 i

행렬 형식은 하나의 시간 스텝만 시뮬레이션하는 경우에(TS = 1) 사용할 수 있습니다. 입력값과 출력값이 하나만 있는 신경망에서 사용하기에 편리하지만, 더 많은 신경망에서도 사용 가능합니다.

각 행렬 인수는 대응되는 셀형 배열 인수의 요소를 하나의 행렬에 저장하여 찾습니다.

P

(sum of RiQ 행렬

T

(sum of ViQ 행렬

Pi

(sum of Ri)×(ID*Q) 행렬

Ai

(sum of Si)×(LD*Q) 행렬

Y

(sum of UiQ 행렬

E

(sum of UiQ 행렬

Pf

(sum of Ri)×(ID*Q) 행렬

Af

(sum of Si)×(LD*Q) 행렬

예제

여기서는 스텝이 12개인 시퀀스 2개(여기서 T1P1에 좌우됨)를 사용하여 필터의 동작을 정의합니다.

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], 뉴런 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회 이후의 오차는 매우 작습니다. 신경망이 입력 신호와 목표 신호 간 관계에 잘 적응한 것입니다.

알고리즘

adaptnet.adaptParam으로 지정된 적응 파라미터 값을 사용하여 net.adaptFcn으로 지정된 함수를 호출합니다.

TS개 스텝을 갖는 입력 시퀀스가 주어지면 신경망이 다음과 같이 업데이트됩니다. 입력 시퀀스의 각 스텝이 한 번에 하나씩 신경망에 입력됩니다. 각각의 스텝이 제시된 후 시퀀스의 다음 스텝이 입력되기 전에 신경망의 가중치와 편향 값이 업데이트됩니다. 따라서 신경망은 TS회 업데이트됩니다.

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |