Main Content

sequenceFoldingLayer

시퀀스 접기 계층

설명

시퀀스 접기 계층은 영상 시퀀스 배치를 영상 배치로 변환합니다. 영상 시퀀스의 시간 스텝에 대해 독립적으로 컨벌루션 연산을 수행하려는 경우 시퀀스 접기 계층을 사용하십시오.

시퀀스 접기 계층을 사용하려면 miniBatchSize 출력값을 대응되는 시퀀스 펼치기 계층의 miniBatchSize 입력값에 연결해야 합니다. 예제는 비디오 분류를 위한 신경망 만들기 항목을 참조하십시오.

생성

설명

layer = sequenceFoldingLayer는 시퀀스 접기 계층을 만듭니다.

예제

layer = sequenceFoldingLayer('Name',Name)은 시퀀스 접기 계층을 만들고 이름-값 쌍을 사용하여 선택적 속성인 Name을 설정합니다. 예를 들어, sequenceFoldingLayer('Name','fold1')은 이름이 'fold1'인 시퀀스 접기 계층을 만듭니다. 속성 이름을 작은따옴표로 묶습니다.

속성

모두 확장

계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. Layer 배열 입력값에 대해 trainNetwork, assembleNetwork, layerGraph, dlnetwork 함수는 이름이 ''인 계층에 자동으로 이름을 할당합니다.

데이터형: char | string

이 속성은 읽기 전용입니다.

계층의 입력값 개수. 이 계층은 단일 입력값만 받습니다.

데이터형: double

이 속성은 읽기 전용입니다.

계층의 입력값 이름. 이 계층은 단일 입력값만 받습니다.

데이터형: cell

계층의 출력값 개수.

이 계층은 다음 두 개의 출력값을 갖습니다.

  • 'out' – 형태가 변경된 입력값에 해당하는 출력 특징 맵.

  • 'miniBatchSize' – 계층에 전달된 미니 배치의 크기. 이 출력값은 대응되는 시퀀스 펼치기 계층의 'miniBatchSize' 입력값에 연결되어야 합니다.

데이터형: double

계층의 출력값 이름.

이 계층은 다음 두 개의 출력값을 갖습니다.

  • 'out' – 형태가 변경된 입력값에 해당하는 출력 특징 맵.

  • 'miniBatchSize' – 계층에 전달된 미니 배치의 크기. 이 출력값은 대응되는 시퀀스 펼치기 계층의 'miniBatchSize' 입력값에 연결되어야 합니다.

데이터형: cell

예제

모두 축소

이름이 'fold1'인 시퀀스 접기 계층을 만듭니다.

layer = sequenceFoldingLayer('Name','fold1')
layer = 
  SequenceFoldingLayer with properties:

           Name: 'fold1'
     NumOutputs: 2
    OutputNames: {'out'  'miniBatchSize'}

비디오나 의료 영상 데이터와 같이 영상으로 구성된 시퀀스를 포함하는 데이터를 위한 딥러닝 신경망을 만듭니다.

  • 신경망에 영상으로 구성된 시퀀스를 입력하기 위해 시퀀스 입력 계층을 사용합니다.

  • 각 시간 스텝에 독립적으로 컨벌루션 연산을 적용하기 위해 먼저 시퀀스 접기 계층을 사용하여 영상으로 구성된 시퀀스를 영상으로 구성된 배열로 변환합니다.

  • 이러한 연산을 수행한 후 시퀀스 구조체를 복원하기 위해 시퀀스 펼치기 계층을 사용하여 영상으로 구성된 배열을 다시 영상 시퀀스로 변환합니다.

  • 영상을 특징 벡터로 변환하기 위해 평탄화 계층을 사용합니다.

그런 다음 입력 벡터 시퀀스를 LSTM 계층과 BiLSTM 계층에 입력할 수 있습니다.

신경망 아키텍처 정의하기

28×28 회색조 영상으로 구성된 시퀀스를 10개 클래스로 분류하는 분류 LSTM 신경망을 만듭니다.

다음과 같은 신경망 아키텍처를 정의합니다.

  • 입력 크기가 [28 28 1]인 시퀀스 입력 계층.

  • 5×5 필터 20개를 갖는 컨벌루션, 배치 정규화 및 ReLU 계층 블록.

  • 마지막 시간 스텝만 출력하는 은닉 유닛 200개를 갖는 LSTM 계층.

  • 크기가 10(클래스 개수)인 완전 연결 계층과 그 뒤에 오는 소프트맥스 계층 및 분류 계층.

각 시간 스텝에 대해 컨벌루션 연산을 독립적으로 수행하려면 컨벌루션 계층 앞에 시퀀스 접기 계층을 포함시키십시오. LSTM 계층에는 벡터 시퀀스 입력값이 필요합니다. 시퀀스 구조체를 복원하고 컨벌루션 계층의 출력값 형태를 특징 벡터로 구성된 시퀀스로 변경하려면 컨벌루션 계층과 LSTM 계층 사이에 시퀀스 펼치기 계층과 평탄화 계층을 삽입하십시오.

inputSize = [28 28 1];
filterSize = 5;
numFilters = 20;
numHiddenUnits = 200;
numClasses = 10;

layers = [ ...
    sequenceInputLayer(inputSize,'Name','input')
    
    sequenceFoldingLayer('Name','fold')
    
    convolution2dLayer(filterSize,numFilters,'Name','conv')
    batchNormalizationLayer('Name','bn')
    reluLayer('Name','relu')
    
    sequenceUnfoldingLayer('Name','unfold')
    flattenLayer('Name','flatten')
    
    lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')
    
    fullyConnectedLayer(numClasses, 'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classification')];

계층을 계층 그래프로 변환하고, 시퀀스 접기 계층의 miniBatchSize 출력값을 시퀀스 펼치기 계층의 대응되는 입력값에 연결합니다.

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');

plot 함수를 사용하여 최종 신경망 아키텍처를 확인합니다.

figure
plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

버전 내역

R2019a에 개발됨