sim
신경망 시뮬레이션
구문
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
[Y,Xf,Af] = sim(net,{Q TS},Xi,Ai)
[Y,...] = sim(net,...,'useParallel',...)
[Y,...] = sim(net,...,'useGPU',...)
[Y,...] = sim(net,...,'showResources',...)
[Ycomposite,...] = sim(net,Xcomposite,...)
[Ygpu,...] = sim(net,Xgpu,...)
도움말 보기
help network/sim
을 입력합니다.
설명
sim
은 신경망을 시뮬레이션합니다.
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
는 다음과 같은 입력값을 받습니다.
net | 신경망 |
X | 신경망 입력값 |
Xi | 초기 입력 지연 조건(디폴트 값 = 0) |
Ai | 초기 계층 지연 조건(디폴트 값 = 0) |
T | 신경망 목표값(디폴트 값 = 0) |
그런 후 다음을 반환합니다.
Y | 신경망 출력값 |
Xf | 마지막 입력 지연 조건 |
Af | 마지막 계층 지연 조건 |
sim
은 보통 신경망을 함수로서 호출함으로써 묵시적으로 호출됩니다. 예를 들어, 다음 두 표현식은 모두 동일한 결과를 반환합니다.
y = sim(net,x,xi,ai) y = net(x,xi,ai)
여기서 인수 Xi
, Ai
, Xf
, Af
는 선택 사항으로, 입력 또는 계층 지연이 있는 신경망에서만 사용해야 됩니다.
신호 인수의 형식은 셀형 배열이나 행렬의 형식을 가질 수 있습니다.
셀형 배열 형식이 표현하기 가장 쉬운 형식입니다. 입력값과 출력값이 여러 개인 신경망에서 사용하기에 가장 편리하며, 입력값의 시퀀스를 다음과 같이 표현할 수 있습니다.
X |
| 각각의 |
Xi |
| 각각의 |
Ai |
| 각각의 |
T |
| 각각의 |
Y |
| 각각의 |
Xf |
| 각각의 |
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 |
Xi
, Ai
, Xf
, Af
의 열은 가장 오래된 지연 조건부터 가장 최근까지의 순서로 정렬됩니다.
Xi{i,k} | = | 시간 |
Xf{i,k} | = | 시간 |
Ai{i,k} | = | 시간 |
Af{i,k} | = | 시간 |
행렬 형식은 하나의 시간 스텝만 시뮬레이션하는 경우에((TS = 1)
) 사용할 수 있습니다. 입력값과 출력값이 하나만 있는 신경망에서 사용하기에 편리하지만, 더 많은 신경망에서도 사용 가능합니다.
각 행렬 인수는 대응되는 셀형 배열 인수의 요소를 하나의 행렬에 저장하여 찾습니다.
X |
|
Xi |
|
Ai |
|
T |
|
Y |
|
Xf |
|
Af |
|
셀형 배열 표기법이 사용된 경우, [Y,Xf,Af] = sim(net,{Q TS},Xi,Ai)
는 입력값이 없는 신경망에 사용됩니다.
[Y,...] = sim(net,...,'useParallel',...)
, [Y,...] = sim(net,...,'useGPU',...)
또는 [Y,...] = sim(net,...,'showResources',...)
(또는 함수로서 호출되는 신경망)는 선택적 이름-값 쌍 인수를 받아서 계산이 수행되는 방식을 제어합니다. 이러한 옵션 중 2개는 Parallel Computing Toolbox가 있는 경우 병렬 워커나 GPU 장치를 사용하여 훈련 속도를 높이거나 규모가 큰 데이터셋에 대해 훈련을 할 수 있습니다. 선택적 이름-값 쌍은 다음과 같습니다.
'useParallel','no' | 계산이 일반 MATLAB 스레드에서 이루어집니다. 디폴트 |
'useParallel','yes' | 병렬 풀이 열려 있으면 계산이 병렬 워커에서 이루어집니다. 열려 있지 않으면 일반 MATLAB 스레드에서 계산이 이루어집니다. |
'useGPU','no' | 계산이 CPU에서 이루어집니다. 디폴트 'useGPU' 설정입니다. |
'useGPU','yes' | 현재 gpuDevice가 지원되는 GPU이면 계산이 이 GPU 장치에서 이루어집니다(GPU 요구 사항은 Parallel Computing Toolbox를 참조하십시오). 현재 gpuDevice가 지원되지 않으면 계산이 CPU에서 이루어집니다. |
'useGPU','only' | 열려 있는 병렬 풀이 없으면 이 설정은 |
'showResources','no' | 사용되는 연산 리소스를 명령줄에 표시하지 않습니다. 디폴트 설정입니다. |
'showResources','yes' | 실제 사용되는 연산 리소스의 요약을 명령줄에 표시합니다. 병렬 연산 또는 GPU 연산이 요청됐는데 병렬 풀이 열려 있지 않거나 지원되는 GPU가 없는 경우, 요청된 리소스와 실제 리소스가 다를 수 있습니다. 병렬 워커가 사용되는 경우, 각 워커의 계산 모드가 설명됩니다(풀에 있으나 사용되지 않는 워커 포함). |
[Ycomposite,...] = sim(net,Xcomposite,...)
는 Composite형 데이터를 받아서 Composite형 결과를 반환합니다. Composite형 데이터가 사용되는 경우, 'useParallel'
이 자동으로 'yes'
로 설정됩니다.
[Ygpu,...] = sim(net,Xgpu,...)
는 gpuArray 데이터를 받아서 gpuArray 결과를 반환합니다. gpuArray 데이터가 사용되는 경우, 'useGPU'
가 자동으로 'yes'
로 설정됩니다.
예제
아래 예제에서는 neural network 객체(net
)를 함수로서 호출함으로써 sim
함수가 묵시적으로 호출됩니다.
피드포워드 신경망 시뮬레이션하기
이 예제에서는 해부학적 측정값 x
를 체지방 비율 t
에 매핑하는 데이터셋을 불러옵니다. 10개의 뉴런을 갖는 피드포워드 신경망을 만들어서 이 데이터에 대해 훈련시키고 시뮬레이션합니다.
[x,t] = bodyfat_dataset; net = feedforwardnet(10); net = train(net,x,t);
y = net(x);
NARX 시계열 신경망 시뮬레이션하기
이 예제에서는 외부 입력값으로 개루프 비선형 자기회귀 신경망을 훈련시켜 제어 전류 x
와 자석의 수직 위치 반응 t
로 정의되는 자기 부상 시스템을 모델링하고 신경망을 시뮬레이션합니다. 함수 preparets
는 훈련 및 시뮬레이션 전에 데이터를 준비합니다. 이 함수는 외부 입력값 x
와 이전 위치 값 t
를 모두 포함하는, 개루프 신경망의 결합된 입력값 xo
를 만듭니다. 지연 상태 xi
도 준비합니다.
[x,t] = maglev_dataset; net = narxnet(10); [xo,xi,~,to] = preparets(net,x,{},t); net = train(net,xo,to,xi); y = net(xo,xi)
이 동일한 시스템을 폐루프 형태로 시뮬레이션할 수도 있습니다.
netc = closeloop(net); view(netc) [xc,xi,ai,tc] = preparets(netc,x,{},t); yc = netc(xc,xi,ai);
병렬 풀에서 병렬로 시뮬레이션하기
Parallel Computing Toolbox를 사용하면 훈련 속도를 높이고 PC 1대에 담을 수 있는 것보다도 큰 데이터셋에 대한 훈련을 할 수 있습니다. 아래에서는 여러 병렬 MATLAB 워커에서 훈련과 시뮬레이션이 이루어집니다.
parpool [X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useParallel','yes','showResources','yes'); Y = net(X,'useParallel','yes');
GPU에서 시뮬레이션하기
Composite형 값을 사용하여 데이터를 수동으로 분산하고 결과를 Composite형 값으로 얻습니다. 데이터를 불러옴과 동시에 데이터를 분산하는 경우, 각 데이터셋 조각은 RAM에 담을 수 있어야 하지만 전체 데이터셋은 모든 워커의 RAM의 총합으로만 제한됩니다.
Xc = Composite; for i=1:numel(Xc) Xc{i} = X+rand(size(X))*0.1; % Use real data instead of random end Yc = net(Xc,'showResources','yes');
현재 GPU 장치를 Parallel Computing Toolbox에서 지원하는 경우, 이 GPU 장치를 사용하여 신경망을 시뮬레이션할 수 있습니다.
gpuDevice % Check if there is a supported GPU Y = net(X,'useGPU','yes','showResources','yes');
데이터를 수동으로 GPU에 올리고 GPU에서 결과를 얻으려면 다음을 수행하십시오.
Xgpu = gpuArray(X); Ygpu = net(Xgpu,'showResources','yes'); Y = gather(Ygpu);
고유한 GPU와 연결된 워커는 GPU를 사용하고 나머지 워커는 CPU를 사용하도록 하면서 병렬로 실행하려면 다음을 수행하십시오.
Y = net(X,'useParallel','yes','useGPU','yes','showResources','yes');
CPU 워커는 속도가 빠르지 않을 수 있으므로 고유한 GPU를 갖는 워커만 사용하면 속도가 빨라질 수 있습니다.
Y = net(X,'useParallel','yes','useGPU','only','showResources','yes');
알고리즘
sim
은 다음과 같은 속성을 사용하여 신경망 net
을 시뮬레이션합니다.
net.numInputs, net.numLayers net.outputConnect, net.biasConnect net.inputConnect, net.layerConnect
다음과 같은 속성은 신경망의 가중치와 편향 값과 각 가중치와 연결된 지연의 개수를 결정합니다.
net.IW{i,j} net.LW{i,j} net.b{i} net.inputWeights{i,j}.delays net.layerWeights{i,j}.delays
다음 함수 속성은 sim
이 입력값에 가중치와 편향 값을 적용하여 각 계층의 출력값을 얻는 방법을 나타냅니다.
net.inputWeights{i,j}.weightFcn net.layerWeights{i,j}.weightFcn net.layers{i}.netInputFcn net.layers{i}.transferFcn
버전 내역
R2006a 이전에 개발됨