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. The axes 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. The axes 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

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: 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'

  • 'relu'

  • 'linear'

  • 'softmax'

  • 'sigmoid'

  • 'swish'

  • 'tanh'

계층:

고급 활성화:

  • ELU

  • Softmax

  • ReLU

  • LeakyReLU

  • PReLu*

계층:

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

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

지원되는 Keras 손실 함수

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

  • mean_squared_error

  • categorical_crossentropy

  • sparse_categorical_crossentropy

  • binary_crossentropy

  • 신경망에 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 항목을 참조하십시오. 여러 개의 입력값과 여러 개의 출력값을 갖는 딥러닝 신경망에 대해 자세히 알아보려면 Multiple-Input and Multiple-Output Networks 항목을 참조하십시오.

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

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

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

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

대체 기능

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

호환성 관련 고려 사항

모두 확장

R2018b부터 권장되지 않음

참고 문헌

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

R2017b에 개발됨