주요 콘텐츠

importKerasNetwork

(제거될 예정임) 사전 훈련된 Keras 신경망과 가중치 가져오기

importKerasNetwork 함수는 향후 릴리스에서 제거될 예정입니다. importNetworkFromTensorFlow를 대신 사용하십시오. (R2023b 이후) 코드 업데이트에 대한 자세한 내용은 버전 내역 항목을 참조하십시오.

설명

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: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 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: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

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

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

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

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: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 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)])

입력 인수

모두 축소

신경망 아키텍처와 (해당하는 경우) 가중치를 포함하는 모델 파일의 이름으로, 문자형 벡터 또는 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은 제한적으로 지원합니다.

세부 정보

모두 축소

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

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

  • 사전 훈련된 신경망을 새 영상에 대한 예측 또는 전이 학습을 위해 사용하려면 가져온 모델을 훈련시킬 때 사용하는 영상과 동일한 방식으로 영상을 전처리해야 합니다. 가장 일반적인 전처리 단계로 영상 크기 조정하기, 영상 평균값 빼기, 영상을 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에 개발됨

모두 축소