train
얕은 신경망 훈련
구문
설명
이 함수는 얕은 신경망을 훈련시킵니다. 컨벌루션 신경망 또는 LSTM 신경망에서의 딥러닝은 trainNetwork
를 참조하십시오.
예제
신경망 훈련시키고 플로팅하기
입력값 x
와 목표값 t
로 플로팅할 수 있는 간단한 함수를 정의합니다.
x = [0 1 2 3 4 5 6 7 8];
t = [0 0.84 0.91 0.14 -0.77 -0.96 -0.28 0.66 0.99];
plot(x,t,'o')
feedforwardnet
을 사용하여 2계층 피드포워드 신경망을 만듭니다. 이 신경망에는 10개의 뉴런을 갖는 은닉 계층 1개가 있습니다.
net = feedforwardnet(10); net = configure(net,x,t); y1 = net(x) plot(x,t,'o',x,y1,'x')
신경망을 훈련시키고 다시 시뮬레이션합니다.
net = train(net,x,t); y2 = net(x) plot(x,t,'o',x,y1,'x',x,y2,'*')
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™를 사용하면 Deep Learning Toolbox™로 신경망 시뮬레이션 및 훈련 속도를 높이고 PC 1대에 담을 수 있는 것보다도 큰 데이터셋에 대한 시뮬레이션 및 훈련을 할 수 있습니다. 현재 병렬 훈련은 역전파 훈련만 지원하며, 자기 조직화 맵은 지원하지 않습니다.
아래에서는 병렬 MATLAB 워커에서 훈련과 시뮬레이션이 이루어집니다.
parpool [X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useParallel','yes','showResources','yes'); Y = net(X);
Composite형 값을 사용하여 데이터를 수동으로 분산하고 결과를 Composite형 값으로 얻습니다. 데이터를 불러옴과 동시에 데이터를 분산하는 경우, 각 데이터셋 조각은 RAM에 담을 수 있어야 하지만 전체 데이터셋은 모든 워커의 RAM의 총합으로만 제한됩니다.
[X,T] = vinyl_dataset; Q = size(X,2); Xc = Composite; Tc = Composite; numWorkers = numel(Xc); ind = [0 ceil((1:numWorkers)*(Q/numWorkers))]; for i=1:numWorkers indi = (ind(i)+1):ind(i+1); Xc{i} = X(:,indi); Tc{i} = T(:,indi); end net = feedforwardnet; net = configure(net,X,T); net = train(net,Xc,Tc); Yc = net(Xc);
이 예제에서 신경망 입력값의 처리 설정과 차원을 설정하는 데 함수 configure를 사용한 것을 볼 수 있습니다. 보통 train을 호출할 때 자동으로 신경망 입력값의 처리 설정과 차원이 설정되지만, Composite형 데이터를 입력할 때는 Composite형이 아닌 데이터를 가지고 이 단계를 수동으로 수행해야 합니다.
GPU에서 신경망 훈련시키기
현재 GPU 장치를 Parallel Computing Toolbox에서 지원하는 경우, 이 GPU 장치를 사용하여 신경망을 훈련시킬 수 있습니다. 현재 GPU 훈련은 역전파 훈련만 지원하며, 자기 조직화 맵은 지원하지 않습니다.
[X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useGPU','yes'); y = net(X);
데이터를 수동으로 GPU에 올리려면 다음을 수행하십시오.
[X,T] = vinyl_dataset; Xgpu = gpuArray(X); Tgpu = gpuArray(T); net = configure(net,X,T); net = train(net,Xgpu,Tgpu); Ygpu = net(Xgpu); Y = gather(Ygpu);
이 예제에서 신경망 입력값의 처리 설정과 차원을 설정하는 데 함수 configure를 사용한 것을 볼 수 있습니다. 보통 train을 호출할 때 자동으로 신경망 입력값의 처리 설정과 차원이 설정되지만, gpuArray 데이터를 입력할 때는 gputArray가 아닌 데이터를 가지고 이 단계를 수동으로 수행해야 합니다.
고유한 GPU에 할당된 워커는 GPU를 사용하고 나머지 워커는 CPU를 사용하도록 하면서 병렬로 실행하려면 다음을 수행하십시오.
net = train(net,X,T,'useParallel','yes','useGPU','yes'); y = net(X);
CPU 워커는 속도가 빠르지 않을 수 있으므로 고유한 GPU를 갖는 워커만 사용하면 속도가 빨라질 수 있습니다.
net = train(net,X,T,'useParallel','yes','useGPU','only'); Y = net(X);
검사 지점 저장을 사용하여 신경망 훈련시키기
최대 2분에 한 번씩 검사 지점을 저장하면서 신경망을 훈련시킵니다.
[x,t] = vinyl_dataset; net = fitnet([60 30]); net = train(net,x,t,'CheckpointFile','MyCheckpoint','CheckpointDelay',120);
컴퓨터에 장애가 발생하면 마지막 신경망을 복구하여 장애 지점부터 훈련을 계속하는 데 사용할 수 있습니다. 검사 지점 파일에는 신경망, 훈련 기록, 파일 이름, 시간, 번호가 포함된 구조체 변수 checkpoint
가 들어 있습니다.
[x,t] = vinyl_dataset; load MyCheckpoint net = checkpoint.net; net = train(net,x,t,'CheckpointFile','MyCheckpoint');
검사 지점 기능은 'UseParallel'
파라미터를 사용하여 시작한 병렬 훈련 세션을 중지할 때도 유용합니다. 병렬 훈련 중에는 신경망 훈련 툴을 사용할 수 없습니다. 이 경우 'CheckpointFile'
을 설정하고 Ctrl+C를 사용하여 언제든지 훈련을 중지한 다음 검사 지점 파일을 불러와서 신경망과 훈련 기록를 얻을 수 있습니다.
입력 인수
net
— 입력 신경망
network
객체
입력 신경망으로, network
객체로 지정됩니다. network
객체를 만들려면 feedforwardnet
또는 narxnet
등을 사용하십시오.
X
— 신경망 입력값
행렬 | 셀형 배열 | Composite형 데이터 | gpuArray
신경망 입력값으로, R
×Q
행렬 또는 Ni
×TS
셀형 배열로 지정됩니다. 여기서 각각은 다음을 나타냅니다.
R
은 입력 크기입니다.Q
는 배치 크기입니다.Ni = net.numInputs
TS
는 시간 스텝의 개수입니다.
train
인수에는 두 가지 형식(행렬 및 셀형 배열)이 있습니다. 정적 문제, 입력값과 출력값이 각각 1개씩인 신경망에는 행렬을 사용하고, 시간 스텝이 여러 개인 경우, 입력값과 출력값이 여러 개인 신경망에는 셀형 배열을 사용하십시오.
행렬 형식은 하나의 시간 스텝만 시뮬레이션하는 경우에(
TS = 1
) 사용할 수 있습니다. 입력값과 출력값이 하나만 있는 신경망에서 사용하기에 편리하지만, 더 많은 신경망에서도 사용 가능합니다. 신경망의 입력값이 여러 개인 경우, 행렬 크기는 (Ri
의 합)×Q
입니다.셀형 배열은 보다 일반적인 형식이며, 입력값의 시퀀스를 표현할 수 있어 입력값과 출력값이 여러 개인 신경망에서 사용하기에 더 편리합니다. 각각의
X{i,ts}
요소는Ri
×Q
행렬로, 여기서Ri = net.inputs{i}.size
입니다.
Composite형 데이터가 사용되는 경우, 'useParallel'
이 자동으로 'yes'
로 설정됩니다. 이 함수는 Composite형 데이터를 받아서 Composite형 결과를 반환합니다.
gpuArray 데이터가 사용되는 경우, 'useGPU'
가 자동으로 'yes'
로 설정됩니다. 이 함수는 gpuArray 데이터를 받아서 gpuArray 결과를 반환합니다.
참고
X의 열에 적어도 하나의 NaN
이 있는 경우, train
은 이 열을 훈련, 테스트 또는 검증에 사용하지 않습니다.
T
— 신경망 목표값
모두 0 (디폴트 값) | 행렬 | 셀형 배열 | Composite형 데이터 | gpuArray
신경망 목표값으로, U
×Q
행렬 또는 No
×TS
셀형 배열로 지정됩니다. 여기서 각각은 다음을 나타냅니다.
U
는 입력 크기입니다.Q
는 배치 크기입니다.No = net.numOutputs
TS
는 시간 스텝의 개수입니다.
train
인수에는 두 가지 형식(행렬 및 셀형 배열)이 있습니다. 정적 문제, 입력값과 출력값이 각각 1개씩인 신경망에는 행렬을 사용하고, 시간 스텝이 여러 개인 경우, 입력값과 출력값이 여러 개인 신경망에는 셀형 배열을 사용하십시오.
행렬 형식은 하나의 시간 스텝만 시뮬레이션하는 경우에(
TS = 1
) 사용할 수 있습니다. 입력값과 출력값이 하나만 있는 신경망에서 사용하기에 편리하지만, 더 많은 신경망에서도 사용 가능합니다. 신경망의 입력값이 여러 개인 경우, 행렬 크기는 (Ui
의 합)×Q
입니다.셀형 배열은 보다 일반적인 형식이며, 입력값의 시퀀스를 표현할 수 있어 입력값과 출력값이 여러 개인 신경망에서 사용하기에 더 편리합니다. 각각의
T{i,ts}
요소는Ui
×Q
행렬로, 여기서Ui = net.outputs{i}.size
입니다.
Composite형 데이터가 사용되는 경우, 'useParallel'
이 자동으로 'yes'
로 설정됩니다. 이 함수는 Composite형 데이터를 받아서 Composite형 결과를 반환합니다.
gpuArray 데이터가 사용되는 경우, 'useGPU'
가 자동으로 'yes'
로 설정됩니다. 이 함수는 gpuArray 데이터를 받아서 gpuArray 결과를 반환합니다.
T
는 선택 사항으로, 목표값이 필요한 신경망에서만 사용해야 됩니다.
참고
목표값 T
내 모든 NaN
값은 누락된 데이터로 취급됩니다. T
의 요소가 NaN
이면, 그 요소는 훈련, 테스트 또는 검증에 사용되지 않습니다.
Xi
— 초기 입력 지연 조건
모두 0 (디폴트 값) | 셀형 배열 | 행렬
초기 입력 지연 조건으로, Ni
×ID
셀형 배열 또는 R
×(ID*Q)
행렬로 지정됩니다. 여기서 각각은 다음을 나타냅니다.
ID = net.numInputDelays
Ni = net.numInputs
R
은 입력 크기입니다.Q
는 배치 크기입니다.
셀형 배열 입력값의 경우, Xi
의 열은 가장 오래된 지연 조건부터 가장 최근까지의 순서로 정렬됩니다. Xi{i,k}
는 시간 ts = k - ID
에서의 입력값 i
입니다.
Xi
도 선택 사항으로, 입력 또는 계층 지연이 있는 신경망에서만 사용해야 됩니다.
Ai
— 초기 계층 지연 조건
모두 0 (디폴트 값) | 셀형 배열 | 행렬
초기 계층 지연 조건으로, Nl
×LD
셀형 배열 또는 (Si
의 합)×(LD*Q
) 행렬로 지정됩니다. 여기서 각각은 다음을 나타냅니다.
Nl = net.numLayers
LD = net.numLayerDelays
Si = net.layers{i}.size
Q
는 배치 크기입니다.
셀형 배열 입력값의 경우, Ai
의 열은 가장 오래된 지연 조건부터 가장 최근까지의 순서로 정렬됩니다. Ai{i,k}
는 시간 ts = k - LD
에서의 계층 출력값 i
입니다.
EW
— 오차 가중치
셀형 배열
오차 가중치로, No
×TS
셀형 배열 또는 (Ui
의 합)×Q
행렬로 지정됩니다. 여기서 각각은 다음을 나타냅니다.
No = net.numOutputs
TS
는 시간 스텝의 개수입니다.Ui = net.outputs{i}.size
Q
는 배치 크기입니다.
셀형 배열 입력값의 경우, 각 요소 EW{i,ts}
는 Ui
×Q
행렬입니다. 여기서 각각은 다음을 나타냅니다.
Ui = net.outputs{i}.size
Q
는 배치 크기입니다.
오차 가중치 EW
에서 No
, TS
, Ui
, Q
의 값 전부 또는 일부가 1이 될 수 있습니다. 이 경우, EW
의 차원은 목표값 T
와 일치하도록 자동으로 확장됩니다. 이로 인해 임의의 차원에(예: 샘플당) 가중치를 적용하면 다른 차원에(예: TS=1
인 경우의 시간) 동일한 중요도를 편리하게 줄 수 있습니다. 예를 들어 모든 차원이 1인 경우(EW = {1}
), 모든 목표값의 중요도는 동일하게 취급됩니다. 이는 EW
의 디폴트 값입니다.
위에서 설명한 바와 같이 오차 가중치 EW
의 차원은 목표값 T
의 차원과 같을 수도 있고 일부 차원이 1로 설정될 수도 있습니다. 예를 들어, EW
가 1×Q
라면 목표 샘플들은 서로 다른 중요도를 갖지만 하나의 샘플에 포함된 각 요소는 동일한 중요도를 갖습니다. EW
가 (Ui
의 합)×1이라면 각 출력 요소는 서로 다른 중요도를 갖고, 모든 샘플은 동일한 중요도로 취급됩니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 'useParallel','yes'
useParallel
— 병렬 계산을 지정하는 옵션
'no'
(디폴트 값) | 'yes'
병렬 계산을 지정하는 옵션으로, 'yes'
또는 'no'
로 지정됩니다.
'no'
– 계산이 일반적인 MATLAB 스레드에서 이루어집니다. 디폴트'useParallel'
설정입니다.'yes'
– 병렬 풀이 열려 있으면 계산이 병렬 워커에서 이루어집니다. 열려 있지 않으면 계산이 일반적인 MATLAB® 스레드에서 이루어집니다.
useGPU
— GPU 계산을 지정하는 옵션
'no'
(디폴트 값) | 'yes'
| 'only'
GPU 계산을 지정하는 옵션으로, 'yes'
, 'no'
또는 'only'
로 지정됩니다.
'no'
– 계산이 CPU에서 이루어집니다. 디폴트'useGPU'
설정입니다.'yes'
– 현재gpuDevice
가 지원되는 GPU이면 계산이 이 GPU 장치에서 이루어집니다(GPU 요구 사항은 Parallel Computing Toolbox를 참조하십시오). 현재gpuDevice
가 지원되지 않으면 계산이 CPU에서 이루어집니다.'useParallel'
도'yes'
이고 병렬 풀이 열려 있으면, 고유한 GPU를 갖는 각 워커는 해당 GPU를 사용하고 나머지 워커는 각각의 CPU 코어에서 계산을 실행합니다.'only'
– 열려 있는 병렬 풀이 없으면 이 설정은'yes'
와 같습니다. 병렬 풀이 열려 있으면 고유한 GPU를 갖는 워커만 사용됩니다. 그러나 병렬 풀이 열려 있는데 지원되는 GPU가 없으면 모든 워커 CPU에서 계산이 이루어집니다.
showResources
— 리소스를 표시하는 옵션
'no'
(디폴트 값) | 'yes'
리소스를 표시하는 옵션으로, 'yes'
또는 'no'
로 지정됩니다.
'no'
– 사용되는 연산 리소스를 명령줄에 표시하지 않습니다. 디폴트 설정입니다.'yes'
– 실제 사용되는 연산 리소스의 요약을 명령줄에 표시합니다. 병렬 연산 또는 GPU 연산이 요청됐는데 병렬 풀이 열려 있지 않거나 지원되는 GPU가 없는 경우, 요청된 리소스와 실제 리소스가 다를 수 있습니다. 병렬 워커가 사용되는 경우, 각 워커의 계산 모드가 설명됩니다(풀에 있으나 사용되지 않는 워커 포함).
reduction
— 메모리 축소 배율
1 (디폴트 값) | 양의 정수
메모리 축소 배율로, 양의 정수로 지정됩니다.
대부분의 신경망에서 디폴트 CPU 훈련 계산 모드는 컴파일된 MEX 알고리즘입니다. 그러나 규모가 큰 신경망에서는 계산이 MATLAB 계산 모드로 이루어질 수 있습니다. 계산 모드는 'showResources'
를 사용하여 확인할 수 있습니다. MATLAB을 사용 중이고 메모리가 문제가 되는 경우, 축소 배율 옵션을 1보다 큰 값 N으로 설정하면 훈련 시간이 더 오래 걸리지만 훈련에 필요한 임시 저장 공간을 N배만큼 줄일 수 있습니다.
CheckpointFile
— 검사 지점 파일
''
(디폴트 값) | 문자형 벡터
검사 지점 파일로, 문자형 벡터로 지정됩니다.
'CheckpointFile'
의 값은 현재 작업 폴더에 저장할 파일 이름 또는 다른 폴더의 파일 경로로 설정할 수 있습니다. 혹은 빈 문자열로 설정하여 검사 지점 저장을 비활성화할 수 있습니다(디폴트 값).
CheckpointDelay
— 검사 지점 지연
60 (디폴트 값) | 음이 아닌 정수
검사 지점 지연으로, 음이 아닌 정수로 지정됩니다.
선택적 파라미터 'CheckpointDelay'
는 저장이 일어나는 빈도를 제한합니다. 검사 지점의 빈도를 제한하면 계산에 소요되는 시간 대비 검사 지점 저장에 소요되는 시간을 짧게 하여 효율을 개선할 수 있습니다. 디폴트 값은 60으로, 검사 지정 저장이 1분에 두 번 이상 발생하지 않습니다. 검사 지점 저장이 Epoch 1회당 한 번만 발생하도록 하려면 'CheckpointDelay'
의 값을 0으로 설정하십시오.
출력 인수
trainedNet
— 훈련된 신경망
network
객체
훈련된 신경망으로, network
객체로 반환됩니다.
tr
— 훈련 기록
구조체
훈련 기록(epoch
와 perf
)로, 신경망 훈련 함수(net.NET.trainFcn
)에 따라 필드가 결정되는 구조체로 반환됩니다. 다음과 같은 필드를 포함할 수 있습니다.
훈련, 데이터 분할, 성능 함수와 파라미터
훈련, 검증, 테스트 세트의 데이터 분할 인덱스
훈련, 검증, 테스트 세트의 데이터 분할 마스크
Epoch 횟수(
num_epochs
) 및 최적의 Epoch(best_epoch
).훈련 상태 이름 목록(
states
)훈련 전체에 걸쳐 기록된 각 상태 이름에 대한 필드
각 Epoch에서 평가되는 최적의 신경망 성능: 훈련 세트에 대한 최적의 성능(
best_perf
), 검증 세트에 대한 최적의 성능(best_vperf
), 테스트 세트에 대한 최적의 성능(best_tperf
)
알고리즘
train
은 net.trainParam
으로 지정된 훈련 파라미터 값을 사용하여 net.trainFcn
으로 지정된 함수를 호출합니다.
일반적으로 훈련에서 1회의 Epoch이란 신경망에 모든 입력 벡터가 1회 입력되는 것으로 정의됩니다. 그런 다음 이러한 모든 입력 결과에 따라 신경망이 업데이트됩니다.
최대 Epoch 횟수에 도달하거나 성능 목표가 달성되거나 그 밖의 함수 net.trainFcn
중지 조건이 발생하면 훈련이 중지됩니다.
일부 훈련 함수는 이 기준에서 벗어나 Epoch 1회당 하나의 입력 벡터(또는 시퀀스)만 입력하기도 합니다. Epoch 1회당 모든 입력 벡터(또는 시퀀스) 중에서 하나의 입력 벡터(또는 시퀀스)가 무작위로 선택됩니다. competlayer
는 이 동작을 수행하는 훈련 함수인 trainru
를 사용하는 신경망을 반환합니다.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)