Main Content

flattenLayer

평탄화 계층

R2019a 이후

설명

평탄화 계층은 입력값의 공간 차원을 채널 차원으로 축소합니다.

예를 들어, 계층에 대한 입력값이 H×W×C×N×S 배열(영상 시퀀스)이면 평탄화된 출력값은 (H*W*C)×N×S 배열입니다.

생성

설명

layer = flattenLayer는 평탄화된 계층을 만듭니다.

예제

layer = flattenLayer('Name',Name)은 이름-값 쌍을 사용하여 선택적 속성인 Name을 설정합니다. 예를 들어, flattenLayer('Name','flatten1')은 이름이 'flatten1'인 평탄화 계층을 만듭니다.

속성

모두 확장

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

데이터형: char | string

읽기 전용 속성입니다.

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

데이터형: double

읽기 전용 속성입니다.

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

데이터형: cell

읽기 전용 속성입니다.

계층의 출력값 개수. 이 계층은 단일 출력값만 가집니다.

데이터형: double

읽기 전용 속성입니다.

계층의 출력값 이름. 이 계층은 단일 출력값만 가집니다.

데이터형: cell

객체 함수

예제

모두 축소

이름이 'flatten1'인 평탄화 계층을 만듭니다.

layer = flattenLayer('Name','flatten1')
layer = 
  FlattenLayer with properties:

    Name: 'flatten1'

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

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

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

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

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

그런 다음 입력 벡터 시퀀스를 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에 개발됨