Main Content

심층 신경망 디자이너 시작하기

이 예제에서는 심층 신경망 디자이너를 사용하여 딥러닝 시퀀스 분류용으로 간단한 순환 신경망을 만드는 방법을 보여줍니다.

시퀀스 데이터를 분류하도록 심층 신경망을 훈련시키기 위해 LSTM 신경망을 사용할 수 있습니다. LSTM 신경망을 사용하면 신경망에 시퀀스 데이터를 입력하고 시퀀스 데이터의 개별 시간 스텝을 기준으로 예측을 수행할 수 있습니다.

시퀀스 데이터 불러오기

WaveformData에서 예제 데이터를 불러옵니다. 이 데이터에 액세스하려면 예제를 라이브 스크립트로 여십시오. 이 데이터에는 사인파, 구형파, 삼각파, 톱니파 클래스에 해당하는 4개 파형이 포함되어 있습니다. 이 예제에서는 시계열 데이터를 주고 파형 유형을 인식하도록 LSTM 신경망을 훈련시킵니다. 각 시퀀스는 3개의 채널을 가지며 길이가 서로 다릅니다.

load WaveformData 

시퀀스 중 일부를 플롯으로 시각화합니다.

numChannels = size(data{1},2);
classNames = categories(labels);

figure
tiledlayout(2,2)
for i = 1:4
    nexttile
    stackedplot(data{i},DisplayLabels="Channel "+string(1:numChannels))
    
    xlabel("Time Step")
    title("Class: " + string(labels(i)))
end

데이터의 80%가 포함된 훈련 세트와 데이터의 10%가 각각 포함된 검증 및 테스트 세트로 데이터를 분할합니다. 데이터를 분할하려면 trainingPartitions 함수를 사용하십시오. 이 함수에 액세스하려면 예제를 라이브 스크립트로 여십시오.

numObservations = numel(data);
[idxTrain,idxValidation,idxTest] = trainingPartitions(numObservations,[0.8 0.1 0.1]);

XTrain = data(idxTrain);
TTrain = labels(idxTrain);

XValidation = data(idxValidation);
TValidation = labels(idxValidation);

XTest = data(idxTest);
TTest = labels(idxTest);

신경망 아키텍처 정의하기

신경망을 구축하려면 심층 신경망 디자이너 앱을 사용하십시오.

deepNetworkDesigner

시퀀스 신경망을 만들기 위해 시퀀스 신경망 섹션의 Sequence to Label에 커서를 올리고 열기를 클릭합니다. 이렇게 하면 sequence-to-sequence 분류 문제에 적합한 사전 작성된 신경망이 열립니다.

심층 신경망 디자이너가 사전 작성된 신경망을 표시합니다.

이 시퀀스 신경망을 파형 데이터 세트에 맞게 쉽게 조정할 수 있습니다.

시퀀스 입력 계층 input을 선택하고 채널 개수와 일치하도록 InputSize를 3으로 설정합니다.

완전 연결 계층 fc를 선택하고 클래스 개수와 일치하도록 OutputSize를 4로 설정합니다.

신경망이 훈련 준비가 되었는지 확인하려면 분석을 클릭하십시오. 딥러닝 신경망 분석기에 보고되는 오류나 경고가 없으므로 신경망이 훈련할 준비가 된 것입니다. 신경망을 내보내기 위해 내보내기를 클릭합니다. 앱은 신경망을 변수 net_1에 저장합니다.

훈련 옵션 지정하기

훈련 옵션을 지정합니다. 옵션 중에서 선택하려면 경험적 분석이 필요합니다.

options = trainingOptions("adam", ...
    MaxEpochs=500, ...
    InitialLearnRate=0.0005, ...
    GradientThreshold=1, ...
    ValidationData={XValidation,TValidation}, ...
    Shuffle = "every-epoch", ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

신경망 훈련시키기

trainnet 함수를 사용하여 신경망을 훈련시킵니다. 분류가 목적이므로 교차 엔트로피 손실을 지정합니다.

net = trainnet(XTrain,TTrain,net_1,"crossentropy",options);

신경망 테스트하기

신경망을 테스트하기 위해 테스트 데이터를 분류하고 분류 정확도를 계산합니다.

minibatchpredict 함수를 사용하여 예측을 수행하고 scores2label 함수를 사용하여 점수를 레이블로 변환합니다.

scores = minibatchpredict(net,XTest);
YTest = scores2label(scores,classNames);

분류 정확도를 계산합니다. 정확도는 올바르게 예측된 레이블의 비율입니다.

acc = mean(YTest == TTest)
acc = 0.8300

예측값을 혼동행렬 차트로 시각화합니다.

figure
confusionchart(TTest,YTest)

참고 항목

관련 항목