Main Content

심층 신경망 디자이너를 사용하여 신경망 구축하기

심층 신경망 디자이너 앱을 사용하여 딥러닝 신경망을 대화형 방식으로 구축하고 편집합니다. 이 앱을 사용하면 신경망을 가져오거나 처음부터 구축하고, 계층 속성을 보고 편집하며, 신경망을 결합하고, 신경망 아키텍처를 만드는 코드를 생성할 수 있습니다. 그런 다음 심층 신경망 디자이너를 사용하여 신경망을 훈련시키거나 명령줄에서 훈련시킬 신경망을 내보낼 수 있습니다.

다음과 같은 다양한 신경망 생성 작업에 심층 신경망 디자이너를 사용할 수 있습니다.

계층 라이브러리에서 블록을 끌어서 연결하여 신경망을 조합합니다. 계층을 빠르게 검색하려면 계층 라이브러리 창의 계층 필터링 검색 상자를 사용하십시오.

Designer pane of Deep Network Designer with an imageInputLayer connected to a convolution2dLayer and an unconnected reluLayer

You can add layers from the workspace to the network in the Designer pane.

  1. Click New.

  2. Pause on From Workspace and click Import.

  3. Choose the layers or network to import and click OK.

  4. Click Add to add the layers or network to the Designer pane.

You can also load pretrained networks by clicking New and selecting them from the start page.

계층 속성을 보고 편집하려면 계층을 선택하십시오. 계층 속성에 대한 자세한 정보를 보려면 계층 이름 옆에 있는 도움말 아이콘을 클릭하십시오.

Properties pane displaying the properties of a crossChannelNormalizationLayer

모든 계층 속성에 대한 정보를 보려면 딥러닝 계층 목록 페이지의 표에서 계층 이름을 클릭하십시오.

신경망을 생성한 후에는 분석하여 오차를 검사할 수 있습니다. 자세한 내용은 신경망 확인하기 항목을 참조하십시오.

전이 학습

전이 학습은 딥러닝 응용 분야에서 널리 사용됩니다. 사전 훈련된 신경망을 새로운 작업을 학습하기 위한 출발점으로 사용할 수 있습니다. 전이 학습으로 신경망을 미세 조정하는 것은 무작위로 초기화된 가중치를 사용하여 신경망을 처음부터 훈련시키는 것보다 일반적으로 훨씬 더 빠르고 쉽습니다. 학습된 특징을 보다 적은 개수의 훈련 영상을 사용하여 새로운 작업으로 빠르게 전이할 수 있습니다.

심층 신경망 디자이너에서 영상 데이터를 사용하는 전이 학습에 적합한 사전 훈련된 신경망을 선택할 수 있습니다.

사전 훈련된 신경망 불러오기

앱을 열고 사전 훈련된 신경망을 선택합니다. 디자이너 탭을 선택하고 새로 만들기를 클릭하여 사전 훈련된 신경망을 불러올 수도 있습니다. 신경망을 다운로드해야 할 경우에는 신경망에서 잠시 멈추고 설치를 클릭하여 애드온 탐색기를 엽니다.

시작하려면 SqueezeNet이나 GoogLeNet과 같이 상대적으로 속도가 빠른 신경망을 선택해 보십시오. 어느 설정이 적절한지 파악했으면 Inception-v3이나 ResNet과 같이 보다 정확한 신경망을 사용해 보며 결과가 개선되는지 살펴봅니다. 사전 훈련된 신경망 선택에 대한 자세한 내용은 사전 훈련된 심층 신경망 항목을 참조하십시오.

Deep Network Designer start page showing available networks

사전 훈련된 신경망 조정하기

전이 학습을 위해 신경망을 준비하려면 마지막 학습 가능한 계층과 마지막 분류 계층을 바꾸십시오.

  • 마지막 학습 가능한 계층이 2차원 컨벌루션 계층인 경우(예: SqueezeNet의 'conv10' 계층):

    • 캔버스에 새 convolution2dLayer를 끌어서 놓습니다. NumFilters 속성은 새 클래스 개수로, FilterSize 속성은 1,1로 설정합니다.

    • 전이된 계층보다 새 계층에서 학습이 더 빨리 이루어지도록 WeightLearnRateFactorBiasLearnRateFactor 값을 늘려서 학습률을 변경합니다.

    • 마지막 convolution2dLayer를 삭제하고 새로 추가한 계층을 대신 연결합니다.

Convolution 2-D layer selected in Deep Network Designer. The Properties pane shows FilterSize set to 1,1 and NumFilters set to 5.

  • 마지막 학습 가능한 계층이 완전 연결 계층인 경우(대부분의 사전 훈련된 신경망, 예: GoogLeNet):

    • fullyConnectedLayer를 캔버스에 끌어서 놓고 OutputSize 속성을 새 클래스 개수로 설정합니다.

    • 전이된 계층보다 새 계층에서 학습이 더 빨리 이루어지도록 WeightLearnRateFactorBiasLearnRateFactor 값을 늘려서 학습률을 변경합니다.

    • 마지막 fullyConnectedLayer를 삭제하고 새로 추가한 계층을 대신 연결합니다.

Fully connected layer selected in Deep Network Designer. The Properties pane shows OutputSize set to 5.

다음으로, 분류 출력 계층을 삭제합니다. 그런 다음 새 classificationLayer를 캔버스에 끌어서 놓고 이 계층을 대신 연결합니다. 출력 계층의 디폴트 설정에 따라 정해진 개수만큼의 클래스를 훈련 중에 학습하게 됩니다.

Classification layer selected in Deep Network Designer. The Properties pane shows OutputSize set to auto.

신경망이 훈련 준비가 되었는지 확인하려면 디자이너 탭에서 분석을 클릭하십시오.

새 영상을 분류하도록 사전 훈련된 신경망을 다시 훈련시키는 방법을 보여주는 예제는 심층 신경망 디자이너를 사용한 전이 학습 항목을 참조하십시오. Audio Toolbox™를 사용하고 있다면 오디오 작업에 적합한 사전 훈련된 신경망을 불러올 수도 있습니다. 새 오디오 신호 세트를 분류하도록 사전 훈련된 신경망을 다시 훈련시키는 방법을 보여주는 예제는 Transfer Learning with Pretrained Audio Networks in Deep Network Designer 항목을 참조하십시오.

회귀 작업을 위해 사전 훈련된 신경망과 전이 학습을 사용할 수도 있습니다. 자세한 내용은 분류 신경망을 회귀 신경망으로 변환하기 항목을 참조하십시오.

영상 분류

계층 라이브러리에서 계층을 끌어서 놓고 연결하여 심층 신경망 디자이너로 영상 분류 신경망을 구축할 수 있습니다. 또한 명령줄에서 신경망을 만든 다음 심층 신경망 디자이너로 신경망을 가져올 수도 있습니다.

예를 들어, 신경망을 만들어 10개 클래스로 나누어진 28×28 영상 데이터 세트를 대상으로 영상 분류를 위한 훈련을 합니다.

inputSize = [28 28 1];
numClasses = 10;

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

deepNetworkDesigner(layers)

Image classification network in Deep Network Designer. The network starts with an image input layer and ends with a classification layer.

이 신경망을 사용자 소유의 데이터에 맞게 조정하려면 영상 입력 계층의 InputSize를 영상 입력 크기와 일치하도록 설정하고 완전 연결 계층의 OutputSize를 데이터의 클래스 개수로 설정하십시오. 더 복잡한 분류 작업의 경우, 더 깊은 심층 신경망을 만드십시오. 자세한 내용은 심층 신경망 항목을 참조하십시오.

영상 분류 신경망을 만들고 훈련시키는 방법을 보여주는 예제는 심층 신경망 디자이너를 사용하여 간단한 영상 분류 신경망 만들기 항목을 참조하십시오.

시퀀스 분류

심층 신경망 디자이너를 사용하여 처음부터 시퀀스 신경망을 구축하거나 사전 작성된 훈련되지 않은 신경망 중 하나를 시작 페이지에서 선택해 사용할 수 있습니다. 심층 신경망 디자이너 시작 페이지를 엽니다. Sequence-to-Label에서 잠시 멈추고 열기를 클릭합니다. 이렇게 하면 시퀀스 분류 문제에 적합한 사전 작성된 신경망이 열립니다.

Sequence classification network in Deep Network Designer. The network starts with a sequence input layer and ends with a classification layer.

이 시퀀스 신경망을 자체 데이터를 사용하는 훈련에 맞게 조정할 수 있습니다. 12개의 특징과 9개의 클래스가 있는 데이터가 있다고 가정하겠습니다. 이 신경망을 조정하려면 sequenceInputLayer를 선택하고 InputSize12로 설정하십시오.

Sequence input layer selected in Deep Network Designer. The Properties pane shows InputSize set to 12.

그런 다음 fullyConnectedLayer를 선택하고 OutputSize를 클래스 개수인 9로 설정합니다.

Fully connected layer selected in Deep Network Designer. The Properties pane shows OutputSize set to 9.

이제 신경망을 훈련시킬 준비가 되었습니다. 심층 신경망 디자이너에서 신경망을 훈련시키려면 예측 변수와 응답 변수를 포함하는 CombinedDatastore를 만드십시오. 자세한 내용은 Import Data into Deep Network Designer 항목을 참조하십시오. 심층 신경망 디자이너를 사용하여 결합된 데이터저장소를 만들고 sequence-to-sequence 회귀 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network for Time Series Forecasting Using Deep Network Designer 항목을 참조하십시오. 심층 신경망 디자이너에서 구축한 신경망을 내보내고 명령줄 함수를 사용하여 훈련시키는 방법을 보여주는 예제는 심층 신경망 디자이너를 사용하여 간단한 시퀀스 분류 신경망 만들기 항목을 참조하십시오.

숫자형 데이터 분류

숫자형 특징으로 구성된 데이터 세트(예: 공간 차원 또는 시간 차원이 없는 숫자형 데이터의 모음)가 있는 경우, 특징 입력 계층을 사용하여 딥러닝 신경망을 훈련시킬 수 있습니다. 특징 입력 계층에 대한 자세한 내용은 featureInputLayer 항목을 참조하십시오.

심층 신경망 디자이너를 사용하여 적합한 신경망을 생성하거나, 명령줄에서 신경망을 만들고 심층 신경망 디자이너로 가져올 수 있습니다.

예를 들어, 10개의 클래스가 있는 숫자형 데이터를 위한 신경망을 만듭니다. 여기서 각 관측값은 20개의 특징으로 구성되어 있습니다.

inputSize = 20;
numClasses = 10;

layers = [
featureInputLayer(inputSize,'Normalization','zscore')
fullyConnectedLayer(50)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];

deepNetworkDesigner(layers)

Feature classification network in Deep Network Designer. The network starts with a feature input layer and ends with a classification layer.

이 신경망을 사용자 소유의 데이터에 맞게 조정하려면 특징 입력 계층의 InputSize를 데이터의 특징 수와 일치하도록 설정하고 완전 연결 계층의 OutputSize를 데이터의 클래스 개수로 설정하십시오. 더 복잡한 분류 작업의 경우, 더 깊은 심층 신경망을 만드십시오. 자세한 내용은 심층 신경망 항목을 참조하십시오.

테이블의 데이터를 사용하여 심층 신경망 디자이너에서 신경망을 훈련시키려면 먼저 데이터를 적절한 데이터저장소로 변환해야 합니다. 예를 들어, 테이블을 예측 변수와 응답 변수가 포함된 배열로 변환하는 것부터 시작합니다. 그런 다음 배열을 arrayDatastore 객체로 변환합니다. 마지막으로, 예측 변수와 응답 변수 배열 데이터저장소를 CombinedDatastore 객체로 결합합니다. 그런 다음, 이렇게 결합한 데이터저장소를 심층 신경망 디자이너에서의 훈련에 사용할 수 있습니다. 자세한 내용은 Import Data into Deep Network Designer 항목을 참조하십시오. 또한, 신경망을 작업 공간으로 내보내어 테이블형 데이터와 trainNetwork 함수로 훈련시킬 수도 있습니다.

분류 신경망을 회귀 신경망으로 변환하기

신경망의 최종 계층을 교체하여 분류 신경망을 회귀 신경망으로 변환할 수 있습니다. 이 변환은 사전 훈련된 분류 신경망을 받아서 회귀 작업을 위해 다시 훈련시키려고 할 때 유용합니다.

예를 들어, GoogLeNet 사전 훈련된 신경망이 있다고 가정하겠습니다. 이 신경망을 단일 응답 변수를 가진 회귀 신경망으로 변환하려면 최종 완전 연결 계층, 소프트맥스 계층, 분류 출력 계층을 OutputSize가 1(응답 변수의 개수)로 설정된 완전 연결 계층과 하나의 회귀 계층으로 교체합니다.

Diagram of the conversion of a classification network into a regression network. The final two layers of the classification network, a softmax layer and a classification layer, are replaced by a regression layer.

출력값에 여러 응답 변수가 있다면 완전 연결 계층의 OutputSize 값을 응답 변수의 개수로 변경합니다.

다중 입력 및 다중 출력 신경망

다중 입력값

신경망에서 여러 소스의 데이터 또는 다양한 형태의 데이터가 필요한 경우 다중 입력값을 갖는 신경망을 정의할 수 있습니다. 예를 들어, 어떤 신경망은 여러 센서에서 캡처한 다양한 해상도의 영상 데이터가 필요합니다.

심층 신경망 디자이너를 사용하여 각 계층의 입력값과 출력값을 제어할 수 있습니다. 예를 들어, 여러 영상 입력값을 사용하는 신경망을 만들려면 각각 영상 입력 계층에서 시작하는 두 개의 분지를 만듭니다.

Network with multiple inputs in Deep Network Designer. The network has two image input layers and a single classification output layer.

심층 신경망 디자이너와 datastore 객체를 사용하여 입력 유형이 동일한 다중 입력 신경망을 훈련시킬 수 있습니다(예: 두 가지 다른 소스의 영상을 처리). 여러 형식의 데이터(예: 영상 및 시퀀스 데이터)를 사용하는 신경망의 경우, 사용자 지정 훈련 루프를 사용하여 신경망을 훈련시키십시오. 자세한 내용은 사용자 지정 훈련 루프를 위한 dlnetwork 객체 항목을 참조하십시오.

다중 출력값

다양한 형식의 여러 응답 변수가 필요한 작업(예: categorical형과 숫자형 출력값이 모두 필요한 작업)의 경우 다중 출력값을 사용하여 신경망을 정의할 수 있습니다.

심층 신경망 디자이너를 사용하여 각 계층의 출력값을 제어할 수 있습니다.

The end of a network with multiple outputs. The first branch ends with a fully connected layer and a softmax layer. The second branch ends with a fully connected layer.

다중 출력 신경망을 훈련시키려면 사용자 지정 훈련 루프를 사용해야 합니다. 사용자 지정 훈련 루프는 출력 계층을 포함하지 않는 dlnetwork 객체를 사용해야 합니다. 자세한 내용은 사용자 지정 훈련 루프를 위한 dlnetwork 객체 항목을 참조하십시오.

심층 신경망

대규모 신경망을 구축하는 것은 어려울 수 있지만, 심층 신경망 디자이너를 사용하여 생성 속도를 높일 수 있습니다. 한 번에 여러 개의 계층 블록으로 작업할 수 있습니다. 여러 개의 계층을 선택한 다음 복사하여 붙여넣거나 삭제합니다. 예를 들어, 계층 블록을 사용하여 컨벌루션 계층, 배치 정규화 계층, ReLU 계층을 묶어 여러 복사본을 만들 수 있습니다.

Group selection of multiple layers in Deep Network Designer.

훈련된 신경망의 경우, 계층을 복사하면 가중치와 편향도 복사됩니다.

앱으로 작업 공간에서 하위 신경망을 복사하여 쉽게 연결할 수도 있습니다. 앱으로 신경망이나 계층을 가져오려면 새로 만들기 > 작업 공간에서 가져오기를 클릭하십시오. 추가를 클릭하여 계층을 현재 신경망에 추가합니다.

고급 딥러닝 응용 사례

심층 신경망 디자이너를 사용하여 고급 응용 사례(예: 컴퓨터 비전 또는 영상 처리 작업)를 위한 신경망을 구축하고 훈련시킬 수 있습니다.

의미론적 분할 신경망 만들기

의미론적 분할은 영상의 각 픽셀에 클래스 레이블을 연결하는 과정을 설명합니다. 의미론적 분할의 응용 분야에는 자율 주행을 위한 도로 분할, 의료 진단을 위한 암 세포 분할 등이 있습니다.

계층 라이브러리의 계층을 디자이너 창으로 끌어서 놓거나 명령줄에서 신경망을 만들고 심층 신경망 디자이너로 가져와서 의미론적 분할 신경망을 만듭니다.

예를 들어, 다운샘플링과 업샘플링 설계에 기반한 단순 의미론적 분할 신경망을 만듭니다.

inputSize = [32 32 1];

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer([3,3],64,'Padding',[1,1,1,1])
    reluLayer
    maxPooling2dLayer([2,2],'Stride',[2,2])
    convolution2dLayer([3,3],64,'Padding',[1,1,1,1])
    reluLayer
    transposedConv2dLayer([4,4],64,'Stride',[2,2],'Cropping',[1,1,1,1])
    convolution2dLayer([1,1],2)
    softmaxLayer
    pixelClassificationLayer
    ];

deepNetworkDesigner(layers) 

Semantic segmentation network in Deep Network Designer. The network starts with an image input layer and ends with a pixel classification layer.

의미론적 분할 신경망을 생성하고 훈련시키는 방법에 대한 자세한 내용은 Train Simple Semantic Segmentation Network in Deep Network Designer (Computer Vision Toolbox) 항목을 참조하십시오.

image-to-image 회귀 신경망 만들기

image-to-image 회귀는 입력 영상을 받고 종종 같은 크기의 출력 영상을 생성하는 작업을 포함합니다. 이 신경망 유형은 초고해상도, 채색 또는 영상 디블러 처리에 유용합니다.

심층 신경망 디자이너를 사용하여 image-to-image 회귀 신경망을 만들 수 있습니다. 예를 들어, Computer Vision Toolbox™에서 unetLayers를 사용하여 image-to-image 회귀에 적합한 단순 신경망 아키텍처를 만듭니다. 이 함수는 의미론적 분할에 적합한 신경망을 제공하는데 이 신경망은 image-to-image 회귀에 맞도록 쉽게 조정될 수 있습니다.

입력 크기가 28×28×1 픽셀인 신경망을 만듭니다.

layers = unetLayers([28,28,1],2,'encoderDepth',2);
deepNetworkDesigner(layers);

디자이너 창의 계층 라이브러리에서 소프트맥스와 픽셀 분류 계층을 회귀 계층으로 교체합니다.

Diagram of the conversion of a pixel classification network into an image-to-image regression network. The final two layers of the classification network, a softmax layer and a pixel classification layer, are replaced by a regression layer.

최종 컨벌루션 계층을 선택하고 NumFilters 속성을 1로 설정합니다.

Convolutional 2-D layer selected in Deep Network Designer. The Properties pane shows NumFilters set to 1.

image-to-image 회귀 신경망을 생성하고 훈련시키는 방법에 대한 자세한 내용은 Image-to-Image Regression in Deep Network Designer 항목을 참조하십시오.

사용자 지정 훈련 루프를 위한 dlnetwork 객체

심층 신경망 디자이너를 사용하여 dlnetwork 객체를 구축하고 분석할 수 있습니다. dlnetwork 객체를 사용하면 자동 미분을 통해 사용자 지정 훈련 루프를 지원할 수 있습니다. 기본 제공 훈련 옵션이 작업에 필요한 훈련 옵션을 제공하지 않는 경우 사용자 지정 훈련 루프를 사용하십시오.

사용자 지정 훈련 루프를 사용하여 신경망을 훈련시킬 준비가 되었는지 확인하려면 분석 > dlnetwork 분석을 클릭하십시오. 자세한 내용은 신경망 확인하기 항목을 참조하십시오.

사용자 지정 훈련 루프를 사용하는 훈련은 심층 신경망 디자이너에서 지원되지 않습니다. 사용자 지정 훈련 루프를 사용하여 신경망을 훈련시키려면 먼저 신경망을 작업 공간으로 내보내고 이를 dlnetwork 객체로 변환하십시오. 그런 다음 dlnetwork 객체와 사용자 지정 훈련 루프를 사용하여 신경망을 훈련시킬 수 있습니다. 자세한 내용은 Train Network Using Custom Training Loop 항목을 참조하십시오.

신경망 확인하기

신경망을 확인하고 계층을 더 자세히 살펴보려면 디자이너 탭에서 분석을 클릭하십시오. 신경망에서 크기 불일치를 해결하려면 문제를 검사하고 계층 속성을 검토하십시오. 심층 신경망 디자이너로 돌아가서 계층을 편집한 다음 다시 분석을 클릭하여 결과를 확인합니다. 딥러닝 신경망 분석기에 보고되는 오류가 없으면 편집한 신경망이 훈련시킬 준비가 된 것입니다.

Deep Learning Network Analyzer showing zero warnings or errors.

사용자 지정 훈련 워크플로를 위해 신경망을 분석할 수도 있습니다. 분석 > dlnetwork 분석을 클릭하여 dlnetwork 객체를 사용한 경우의 신경망을 분석합니다. 예를 들어, 신경망 분석기는 계층 그래프에 출력 계층이 없음을 확인합니다.

참고 항목

관련 항목