Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

심층 신경망 디자이너를 사용하여 간단한 시퀀스 분류 신경망 만들기

이 예제에서는 심층 신경망 디자이너를 사용하여 간단한 장단기 기억(LSTM) 분류 신경망을 만드는 방법을 보여줍니다.

시퀀스 데이터를 분류하도록 심층 신경망을 훈련시키기 위해 LSTM 신경망을 사용할 수 있습니다. LSTM 신경망은 시퀀스 데이터의 시간 스텝 간의 장기적인 종속성을 학습하는 순환 신경망(RNN)의 일종입니다.

이 예제에서는 다음을 수행하는 방법을 보여줍니다.

  • 시퀀스 데이터를 불러옵니다.

  • 신경망 아키텍처를 생성합니다.

  • 훈련 옵션을 지정합니다.

  • 신경망을 훈련시킵니다.

  • 새로운 데이터의 레이블을 예측하고 분류 정확도를 계산합니다.

데이터 불러오기

[1][2]에서 설명한 Japanese Vowels 데이터 세트를 불러옵니다. 예측 변수는 특징 차원이 12이고 다양한 길이의 시퀀스를 포함하는 셀형 배열입니다. 레이블은 레이블 1,2,...,9로 구성된 categorical형 벡터입니다.

[XTrain,YTrain] = japaneseVowelsTrainData;
[XValidation,YValidation] = japaneseVowelsTestData;

처음 몇 개 훈련 시퀀스의 크기를 확인합니다. 시퀀스는 각 특징에 대해 하나의 행을 갖는 12개의 행과 각 시간 스텝에 대해 하나의 열을 갖는 가변 개수의 열로 이루어진 행렬입니다.

XTrain(1:5)
ans=5×1 cell array
    {12×20 double}
    {12×26 double}
    {12×22 double}
    {12×20 double}
    {12×21 double}

신경망 아키텍처 정의하기

심층 신경망 디자이너를 엽니다.

deepNetworkDesigner

Sequence-to-Label에서 일시 중지하고 열기를 클릭합니다. 이렇게 하면 시퀀스 분류 문제에 적합한 사전 작성된 신경망이 열립니다.

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

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

sequenceInputLayer를 선택하고 특징 차원과 일치하도록 InputSize가 12로 설정되었는지 확인합니다.

lstmLayer를 선택하고 NumHiddenUnits를 100으로 설정합니다.

fullyConnectedLayer를 선택하고 OutputSize가 클래스 개수인 9로 설정되었는지 확인합니다.

신경망 아키텍처 확인하기

신경망을 확인하고 계층의 더 많은 세부 정보를 살펴보려면 분석을 클릭하십시오.

신경망 아키텍처 내보내기

신경망 아키텍처를 작업 공간으로 내보내려면 디자이너 탭에서 내보내기를 클릭하십시오. 심층 신경망 디자이너가 신경망을 변수 layers_1로 저장합니다.

내보내기 > 코드 생성을 선택하여 신경망 아키텍처를 생성할 코드를 생성할 수도 있습니다.

신경망 훈련시키기

훈련 옵션을 지정하고 신경망을 훈련시킵니다.

미니 배치는 짧은 시퀀스로 구성된 크기가 작은 배치이므로 훈련에는 CPU가 더 적절합니다. 'ExecutionEnvironment''cpu'로 설정합니다. GPU를 사용할 수 있는 경우 GPU에서 훈련시키려면 'ExecutionEnvironment''auto'(디폴트 값)로 설정하십시오.

miniBatchSize = 27;
options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',100, ...
    'MiniBatchSize',miniBatchSize, ...
    'ValidationData',{XValidation,YValidation}, ...
    'GradientThreshold',2, ...
    'Shuffle','every-epoch', ...
    'Verbose',false, ...
    'Plots','training-progress');

신경망을 훈련시킵니다.

net = trainNetwork(XTrain,YTrain,layers_1,options);

신경망 테스트하기

테스트 데이터를 분류하고 분류 정확도를 계산합니다. 훈련과 같게 미니 배치의 크기를 지정합니다.

YPred = classify(net,XValidation,'MiniBatchSize',miniBatchSize);
acc = mean(YPred == YValidation)
acc = 0.9432

다음 단계에서는 양방향 LSTM(BiLSTM) 계층을 사용하거나 보다 심층의 신경망을 만들어서 정확도를 개선해 볼 수 있습니다. 자세한 내용은 장단기 기억 신경망 항목을 참조하십시오.

컨벌루션 신경망을 사용하여 시퀀스 데이터를 분류하는 방법을 보여주는 예제는 딥러닝을 사용해 음성 명령 인식하기 항목을 참조하십시오.

참고 문헌

[1] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. “Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, no. 11–13 (November 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X.

[2] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. Japanese Vowels 데이터 세트. 배포: UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

참고 항목

관련 항목