Main Content

importKerasNetwork

사전 훈련된 Keras 신경망과 가중치 가져오기

설명

예제

net = importKerasNetwork(modelfile)modelfile에서 사전 훈련된 TensorFlow™ -Keras 신경망과 가중치를 가져옵니다.

이 함수를 사용하려면 Deep Learning Toolbox™ Converter for TensorFlow Models 지원 패키지가 필요합니다. 이 지원 패키지가 설치되어 있지 않으면 함수에서 다운로드 링크를 제공합니다.

net = importKerasNetwork(modelfile,Name,Value)는 하나 이상의 이름-값 쌍 인수로 지정된 추가 옵션을 사용하여 사전 훈련된 TensorFlow -Keras 신경망과 가중치를 가져옵니다.

예를 들어, importKerasNetwork(modelfile,'WeightFile',weights)는 모델 파일 modelfile에서 신경망을 가져오고 가중치 파일 weights에서 가중치를 가져옵니다. 이 경우, modelfile은 HDF5 또는 JSON 형식일 수 있고, 가중치 파일은 HDF5 형식이어야 합니다.

예제

모두 축소

Deep Learning Toolbox Converter for TensorFlow Models 지원 패키지를 다운로드하고 설치합니다.

명령줄에 importKerasNetwork를 입력합니다.

importKerasNetwork

Deep Learning Toolbox Converter for TensorFlow Models 지원 패키지가 설치되어 있지 않은 경우, 필요한 지원 패키지로 연결되는 애드온 탐색기 링크를 함수에서 제공합니다. 지원 패키지를 설치하려면 링크를 클릭한 다음 설치를 클릭하십시오. 모델 파일 'digitsDAGnet.h5'에서 신경망을 가져와서 설치가 성공적으로 완료되었는지 명령줄에서 확인합니다. 필요한 지원 패키지가 설치되어 있는 경우, 함수가 DAGNetwork 객체를 반환합니다.

modelfile = 'digitsDAGnet.h5';
net = importKerasNetwork(modelfile)
Warning: Saved Keras networks do not include classes. Classes will be set to categorical(1:N), where N is the number of classes in the classification output layer of the network.  To specify classes, use the 'Classes' argument.
net = 
  DAGNetwork with properties:

         Layers: [13x1 nnet.cnn.layer.Layer]
    Connections: [13x2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

가져올 파일을 지정합니다. 파일 digitsDAGnet.h5는 숫자 영상을 분류하는 유방향 비순환 그래프 컨벌루션 신경망을 포함합니다.

modelfile = 'digitsDAGnet.h5';

신경망을 가져옵니다.

net = importKerasNetwork(modelfile)
Warning: Saved Keras networks do not include classes. Classes will be set to categorical(1:N), where N is the number of classes in the classification output layer of the network.  To specify classes, use the 'Classes' argument.
net = 
  DAGNetwork with properties:

         Layers: [13x1 nnet.cnn.layer.Layer]
    Connections: [13x2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

신경망 아키텍처를 플로팅합니다.

plot(net)
title('DAG Network Architecture')

Figure contains an axes object. The axes object with title DAG Network Architecture contains an object of type graphplot.

가져올 신경망 파일과 가중치 파일을 지정합니다.

modelfile = 'digitsDAGnet.json';
weights = 'digitsDAGnet.weights.h5';

이 신경망은 숫자 데이터에 대해 훈련된 유방향 비순환 그래프 컨벌루션 신경망입니다.

신경망 아키텍처와 가중치를 각각 별도의 파일에서 가져옵니다. .json 파일은 출력 계층 또는 비용 함수에 대한 정보를 포함하지 않습니다. 파일을 가져올 때 출력 계층 유형을 지정합니다.

net = importKerasNetwork(modelfile,'WeightFile',weights, ...
      'OutputLayerType','classification')
Warning: Saved Keras networks do not include classes. Classes will be set to categorical(1:N), where N is the number of classes in the classification output layer of the network.  To specify classes, use the 'Classes' argument.
net = 
  DAGNetwork with properties:

         Layers: [13x1 nnet.cnn.layer.Layer]
    Connections: [13x2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

모델 파일을 지정합니다.

modelfile = 'digitsDAGnet.h5';

클래스 이름을 지정합니다.

classNames = {'0','1','2','3','4','5','6','7','8','9'};

클래스 이름을 사용하여 Keras 신경망을 가져옵니다.

net = importKerasNetwork(modelfile,'Classes',classNames);

분류할 영상을 읽어 들입니다.

digitDatasetPath = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
I = imread(fullfile(digitDatasetPath,'5','image4009.png'));

사전 훈련된 신경망을 사용하여 영상을 분류합니다.

label = classify(net,I);

영상과 분류 결과를 표시합니다.

imshow(I)
title(['Classification result: ' char(label)])

Figure contains an axes object. The axes object with title Classification result: 5 contains an object of type image.

입력 인수

모두 축소

신경망 아키텍처와 (해당하는 경우) 가중치를 포함하는 모델 파일의 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 파일은 현재 폴더 또는 MATLAB® 경로에 있는 폴더에 있어야 합니다. 또는 파일에 대한 전체 또는 상대 경로를 포함해야 합니다.

modelfile

  • 신경망 아키텍처와 가중치를 포함하는 경우, 파일은 HDF5(.h5) 형식이어야 합니다.

  • 신경망 아키텍처만 포함하는 경우, HDF5 또는 JSON(.json) 형식일 수 있습니다.

modelfile이 신경망 아키텍처만 포함하는 경우 'WeightFile' 이름-값 쌍 인수를 사용하여 HDF5 파일에 가중치를 제공해야 합니다.

예: 'digitsnet.h5'

데이터형: char | string

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: importKerasNetwork(modelfile,'OutputLayerType','classification','Classes',classes)는 모델 파일 modelfile에서 신경망을 가져오고, Keras 계층의 끝에 분류 문제를 위한 출력 계층을 추가하고, 출력 계층의 클래스로 classes를 지정합니다.

가중치를 포함하는 파일의 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. WeightFile은 현재 폴더 또는 MATLAB 경로에 있는 폴더에 있어야 합니다. 또는 파일에 대한 전체 또는 상대 경로를 포함해야 합니다.

예: 'WeightFile','weights.h5'

modelfile이 손실 함수를 지정하지 않았을 때 가져온 신경망 아키텍처의 끝부분에 추가되는 출력 계층의 유형으로, 'classification', 'regression' 또는 'pixelclassification'으로 지정됩니다. pixelClassificationLayer (Computer Vision Toolbox) 객체를 추가하려면 Computer Vision Toolbox™가 필요합니다.

modelfile의 신경망이 여러 개의 출력값을 가질 경우 이 인수를 사용하여 출력 계층 유형을 지정할 수 없습니다. importKerasLayers를 대신 사용하십시오. importKerasLayers는 출력값을 위한 자리 표시자 계층을 삽입합니다. 가져온 후에는 findPlaceholderLayers를 사용하여 자리 표시자 계층을 찾고 replaceLayer를 사용하여 자리 표시자 계층을 바꿀 수 있습니다.

예: 'OutputLayerType','regression'

신경망의 입력 영상의 크기로, 2개 또는 3개의 숫자형 값으로 구성된 벡터 [height,width](회색조 영상) 또는 [height,width,channels](컬러 영상)로 지정됩니다. 신경망은 modelfile이 입력 크기를 지정하지 않은 경우 이 정보를 사용합니다.

modelfile의 신경망이 여러 개의 입력값을 가질 경우 이 인수를 사용하여 입력 크기를 지정할 수 없습니다. importKerasLayers를 대신 사용하십시오. importKerasLayers는 입력값을 위한 자리 표시자 계층을 삽입합니다. 가져온 후에는 findPlaceholderLayers를 사용하여 자리 표시자 계층을 찾고 replaceLayer를 사용하여 자리 표시자 계층을 바꿀 수 있습니다.

예: 'ImageInputSize',[28 28]

출력 계층의 클래스로, categorical형 벡터, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 'auto'로 지정됩니다. string형 배열 또는 문자형 벡터로 구성된 셀형 배열 str을 지정하면, 출력 계층의 클래스가 categorical(str,str)로 설정됩니다. Classes'auto'인 경우, 함수는 클래스를 categorical(1:N)으로 설정합니다. 여기서 N은 클래스의 개수입니다.

데이터형: char | categorical | string | cell

출력 인수

모두 축소

사전 훈련된 Keras 신경망으로, 다음 중 하나로 반환됩니다.

  • Keras 신경망이 Sequential 유형인 경우, netSeriesNetwork 객체입니다.

  • Keras 신경망이 Model 유형인 경우, netDAGNetwork 객체입니다.

제한 사항

  • importKerasNetwork 함수는 다음과 같이 TensorFlow-Keras 버전을 지원합니다.

    • 이 함수는 TensorFlow-Keras 버전 2.2.4까지는 완전히 지원합니다.

    • 이 함수는 TensorFlow-Keras 버전 2.2.5~2.4.0은 제한적으로 지원합니다.

세부 정보

모두 축소

지원되는 Keras 계층

importKerasNetwork 함수는 내장 MATLAB 계층으로의 변환에 다음과 같은 TensorFlow-Keras 계층 유형을 지원하며, 몇 가지 제한 사항이 있습니다.

TensorFlow-Keras 계층대응되는 Deep Learning Toolbox 계층
AddadditionLayer

다음과 같은 활성화 이름을 갖는 Activation:

  • elu

  • gelu

  • relu

  • linear

  • softmax

  • sigmoid

  • swish

  • tanh

계층:

고급 활성화:

  • ELU

  • Softmax

  • ReLU

  • LeakyReLU

  • PReLu*

계층:

AveragePooling1DPaddingValue'mean'으로 지정된 averagePooling1dLayer
AveragePooling2DPaddingValue'mean'으로 지정된 averagePooling2dLayer
BatchNormalizationbatchNormalizationLayer
Bidirectional(LSTM(__))bilstmLayer
ConcatenatedepthConcatenationLayer
Conv1Dconvolution1dLayer
Conv2Dconvolution2dLayer
Conv2DTransposetransposedConv2dLayer
CuDNNGRUgruLayer
CuDNNLSTMlstmLayer
DensefullyConnectedLayer
DepthwiseConv2DgroupedConvolution2dLayer
DropoutdropoutLayer
EmbeddingwordEmbeddingLayer (Text Analytics Toolbox)
Flattennnet.keras.layer.FlattenCStyleLayer
GlobalAveragePooling1DglobalAveragePooling1dLayer
GlobalAveragePooling2DglobalAveragePooling2dLayer
GlobalMaxPool1DglobalMaxPooling1dLayer
GlobalMaxPool2DglobalMaxPooling2dLayer
GRUgruLayer
InputimageInputLayer, sequenceInputLayer 또는 featureInputLayer
LSTMlstmLayer
MaxPool1DmaxPooling1dLayer
MaxPool2DmaxPooling2dLayer
MultiplymultiplicationLayer
SeparableConv2DgroupedConvolution2dLayer 또는 convolution2dLayer
TimeDistributed래핑된 계층 앞에는 sequenceFoldingLayer, 래핑된 계층 뒤에는 sequenceUnfoldingLayer
UpSampling2Dresize2dLayer (Image Processing Toolbox)
UpSampling3Dresize3dLayer (Image Processing Toolbox)
ZeroPadding1Dnnet.keras.layer.ZeroPadding1DLayer
ZeroPadding2Dnnet.keras.layer.ZeroPadding2DLayer

* PReLU 계층의 경우, importKerasNetwork 함수가 벡터 값의 스케일링 파라미터를 벡터 요소들의 평균값으로 대체합니다. 가져온 후에 파라미터를 다시 벡터로 변경할 수 있습니다. 예제는 Import Keras PReLU Layer 항목을 참조하십시오.

지원되는 Keras 손실 함수

importKerasNetwork 함수는 다음과 같은 Keras 손실 함수를 지원합니다.

  • mean_squared_error

  • categorical_crossentropy

  • sparse_categorical_crossentropy

  • binary_crossentropy

가져온 신경망에 대한 코드 생성하기

MATLAB Coder™ 또는 GPU Coder™를 Deep Learning Toolbox와 함께 사용하여 가져온 신경망에 대해 MEX, 독립형 CPU, CUDA® MEX 또는 독립형 CUDA 코드를 생성할 수 있습니다. 자세한 내용은 딥러닝 코드 생성 항목을 참조하십시오.

  • MATLAB Coder를 Deep Learning Toolbox와 함께 사용하여 데스크탑 또는 임베디드 타깃에서 실행되는 MEX 또는 독립형 CPU 코드를 생성합니다. Intel® MKL-DNN 라이브러리 또는 ARM® Compute Library를 사용하는, 생성된 독립형 코드를 배포할 수 있습니다. 또는 타사 라이브러리 함수를 호출하지 않는 일반 C 또는 C++ 코드를 생성할 수 있습니다. 자세한 내용은 Deep Learning with MATLAB Coder (MATLAB Coder) 항목을 참조하십시오.

  • GPU Coder를 Deep Learning Toolbox와 함께 사용하여 데스크탑 또는 임베디드 타깃에서 실행되는 CUDA MEX 또는 독립형 CUDA 코드를 생성합니다. CUDA 심층 신경망 라이브러리(cuDNN), TensorRT™ 고성능 추론 라이브러리 또는 Mali GPU용 ARM Compute Library를 사용하는, 생성된 독립형 CUDA 코드를 배포할 수 있습니다. 자세한 내용은 Deep Learning with GPU Coder (GPU Coder) 항목을 참조하십시오.

importKerasNetwork 함수는 신경망 netDAGNetwork 또는 SeriesNetwork 객체로 반환합니다. 이러한 객체는 모두 코드 생성을 지원합니다. MATLAB Coder와 GPU Coder의 Deep Learning Toolbox 객체 지원에 관한 자세한 내용은 Supported Classes (MATLAB Coder) 항목과 Supported Classes (GPU Coder) 항목을 각각 참조하십시오.

가져온 신경망의 계층이 코드 생성을 지원한다면 해당 신경망에 대한 코드를 생성할 수 있습니다. MATLAB Coder 및 GPU Coder와 함께 사용해서 코드 생성을 지원하는 계층의 목록은 Supported Layers (MATLAB Coder) 항목과 Supported Layers (GPU Coder) 항목을 각각 참조하십시오. 각 내장 MATLAB 계층의 코드 생성 기능과 제한 사항에 관한 자세한 내용은 계층의 확장 기능 섹션을 참조하십시오. 예제는 코드 생성imageInputLayerGPU 코드 생성 항목을 참조하십시오.

GPU에 가져온 신경망 사용하기

importKerasNetwork 함수는 GPU에서 실행되지 않습니다. 그러나, importKerasNetwork 함수는 딥러닝을 위해 사전 훈련된 신경망을 GPU에서 사용할 수 있는 DAGNetwork 객체 또는 SeriesNetwork 객체로 가져옵니다.

  • classify를 사용하여 가져온 신경망으로 CPU 또는 GPU 중 하나에서 예측을 수행합니다. 하드웨어 요구 사항은 이름-값 쌍 인수 ExecutionEnvironment를 사용하여 지정하십시오. 출력값이 여러 개인 신경망의 경우, predict 함수를 사용하십시오.

  • predict를 사용하여 가져온 신경망으로 CPU 또는 GPU 중 하나에서 예측을 수행합니다. 하드웨어 요구 사항은 이름-값 쌍 인수 ExecutionEnvironment를 사용하여 지정하십시오. 출력값이 여러 개인 신경망의 경우, 이름-값 인수 ReturnCategoricaltrue로 지정하십시오.

  • trainNetwork를 사용하여 가져온 신경망을 CPU 또는 GPU에서 훈련시킬 수 있습니다. 실행 환경 옵션을 비롯한 훈련 옵션을 지정하려면 trainingOptions 함수를 사용하십시오. 하드웨어 요구 사항은 이름-값 쌍 인수 ExecutionEnvironment를 사용하여 지정하십시오. 훈련을 가속화하는 방법에 대한 자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.

GPU를 사용하려면 Parallel Computing Toolbox™와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오.

  • 신경망에 Deep Learning Toolbox Converter for TensorFlow Models에서 지원하지 않는 계층(지원되는 Keras 계층 항목 참조)이 있으면 importKerasNetwork 함수는 오류 메시지를 반환합니다. 이 경우에도 importKerasLayers를 사용하여 신경망 아키텍처와 가중치를 가져올 수 있습니다.

  • 다중 입력/다중 출력(MIMO)을 포함하는 Keras 신경망을 가져올 수 있습니다. 신경망이 입력값에 대한 입력 크기 정보를 포함하고 출력값에 대한 손실 정보를 포함하는 경우 importKerasNetwork를 사용하십시오. 그 밖의 경우에는 importKerasLayers를 사용하십시오. importKerasLayers 함수는 입력값과 출력값을 위한 자리 표시자 계층을 삽입합니다. 가져온 후에는 findPlaceholderLayers를 사용하여 자리 표시자 계층을 찾고 replaceLayer를 사용하여 자리 표시자 계층을 바꿀 수 있습니다. MIMO Keras 신경망을 가져오는 워크플로는 MIMO ONNX™ 신경망을 가져오는 워크플로와 같습니다. 예제는 Import and Assemble ONNX Network with Multiple Outputs 항목을 참조하십시오. 여러 개의 입력값과 여러 개의 출력값을 갖는 딥러닝 신경망에 대해 자세히 알아보려면 다중 입력 및 다중 출력 신경망 항목을 참조하십시오.

  • 사전 훈련된 신경망을 새 영상에 대한 예측 또는 전이 학습을 위해 사용하려면 가져온 모델을 훈련시킬 때 사용한 영상의 전처리 방식과 동일하게 영상을 전처리해야 합니다. 가장 일반적인 전처리 단계로 영상 크기 조정하기, 영상 평균값 빼기, 영상을 BGR 형식에서 RGB 형식으로 변환하기 등을 들 수 있습니다.

    • 영상의 크기를 조정하려면 imresize를 사용하십시오. 예를 들면 imresize(image,[227,227,3])과 같습니다.

    • 영상을 RGB에서 BGR 형식으로 변환하려면 flip을 사용하십시오. 예를 들면 flip(image,3)과 같습니다.

    훈련 및 예측을 위한 영상 전처리에 대한 자세한 내용은 딥러닝을 위해 영상 전처리하기 항목을 참조하십시오.

  • MATLAB 인덱스는 1부터 시작하는 반면 Python® 인덱스는 0부터 시작합니다. 즉, MATLAB과 Python에서 사용하는 배열의 첫 번째 요소의 인덱스는 각각 1과 0입니다. MATLAB 인덱싱에 대한 자세한 내용은 배열 인덱싱 항목을 참조하십시오. Python에서 만든 인덱스의 배열(ind)을 MATLAB에서 사용하려면 배열을 ind+1로 변환하십시오.

  • 더 많은 팁을 보려면 Tips on Importing Models from TensorFlow, PyTorch, and ONNX 항목을 참조하십시오.

대체 기능

  • importKerasNetwork 또는 importKerasLayers를 사용하여 TensorFlow-Keras 신경망을 HDF5 또는 JSON 형식으로 가져올 수 있습니다. TensorFlow 신경망이 저장된 모델 형식이면 importTensorFlowNetwork 또는 importTensorFlowLayers를 사용하십시오.

  • 사용자 지정 TensorFlow-Keras 계층을 가져오거나 소프트웨어가 TensorFlow-Keras 계층을 이에 상응하는 내장된 MATLAB 계층으로 변환할 수 없는 경우, 사용자 지정 계층의 생성을 시도하는 importTensorFlowNetwork 또는 importTensorFlowLayers를 사용할 수 있습니다. 예를 들어, importTensorFlowNetworkimportTensorFlowLayers는 TensorFlow-Keras Lambda 계층을 가져올 때 사용자 지정 계층을 생성합니다.

참고 문헌

[1] Keras: The Python Deep Learning library. https://keras.io.

버전 내역

R2017b에 개발됨

모두 확장