심층 신경망 디자이너 시작하기
이 예제에서는 심층 신경망 디자이너를 사용하여 딥러닝 시퀀스 분류용으로 간단한 순환 신경망을 만드는 방법을 보여줍니다.
시퀀스 데이터를 분류하도록 심층 신경망을 훈련시키기 위해 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 분류 신경망(훈련되지 않음) 섹션에서 LSTM을 클릭합니다. 이렇게 하면 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)