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);

또한, 심층 신경망 디자이너와 datastore 객체를 사용하여 이 신경망을 훈련시킬 수 있습니다. 심층 신경망 디자이너에서 sequence-to-sequence 회귀 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network for Time Series Forecasting Using Deep Network Designer 항목을 참조하십시오.

신경망 테스트하기

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

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

다음 단계에서는 양방향 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

참고 항목

관련 항목