훈련 전에 입력값과 목표값이 항상 지정된 범위에 속하도록 스케일링하는 것이 유용한 경우가 많습니다. 함수 mapminmax
는 입력값과 목표값이 [–1,1] 범위에 속하도록 스케일링합니다. 다음 코드는 이 함수를 사용하는 방법을 보여줍니다.
[pn,ps] = mapminmax(p);
[tn,ts] = mapminmax(t);
net = train(net,pn,tn);
신경망의 원래 입력값과 목표값은 행렬 p
와 t
에 있습니다. 반환되는 정규화된 입력값과 목표값 pn
과 tn
은 모두 [–1,1] 구간에 속합니다. 구조체 ps
와 ts
에는 설정값이 들어 있습니다. 이 경우에는 원래 입력값과 목표값의 최솟값과 최댓값이 됩니다. 신경망을 훈련시킨 후, 향후 신경망에 적용할 입력값은 ps
설정을 사용해 변환해야 합니다. 설정은 신경망 가중치와 편향처럼 실질적으로 신경망의 일부가 됩니다.
목표값을 스케일링하는 데 mapminmax
가 사용된 경우, 신경망의 출력값은 [–1,1] 범위에 속하는 출력값을 생성하도록 훈련됩니다. 이러한 출력값을 원래 목표값에 사용된 것과 동일한 단위로 다시 변환하려면 설정 ts
를 사용하십시오. 다음 코드는 이전 코드에서 훈련된 신경망을 시뮬레이션한 다음 신경망 출력값을 원래 단위로 다시 변환합니다.
an = sim(net,pn);
a = mapminmax('reverse',an,ts);
신경망 출력값 an
은 정규화된 목표값 tn
에 대응됩니다. 정규화되지 않은 신경망 출력값 a
의 단위는 원래 목표값 t
의 단위와 같습니다.
훈련 세트 데이터를 전처리하는 데 mapminmax
가 사용된 경우, 훈련된 신경망에서 새로운 입력값을 사용할 때마다 새로운 입력값을 설정 ps
에 저장된 훈련 세트에 대해 계산된 최솟값과 최댓값을 사용하여 전처리해야 합니다. 다음 코드는 이미 훈련된 신경망에 새로운 입력값 세트를 적용합니다.
pnewn = mapminmax('apply',pnew,ps);
anewn = sim(net,pnewn);
anew = mapminmax('reverse',anewn,ts);
feedforwardnet
을 비롯한 대부분의 신경망에서 이러한 단계가 자동으로 수행되므로 사용자는 sim
명령을 사용하기만 하면 됩니다.