Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

importKerasNetwork

(削除予定) 事前学習済みの Keras ネットワークおよび重みのインポート

importKerasNetwork は将来のリリースで削除される予定です。代わりに importNetworkFromTensorFlow を使用してください。 (R2023b 以降)コードの更新の詳細については、バージョン履歴を参照してください。

説明

net = importKerasNetwork(modelfile) は、事前学習済みの TensorFlow™ -Keras ネットワークとその重みを modelfile からインポートします。

この関数には、Deep Learning Toolbox™ Converter for TensorFlow Models サポート パッケージが必要です。このサポート パッケージがインストールされていない場合、関数によってダウンロード用リンクが表示されます。

net = importKerasNetwork(modelfile,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、事前学習済みの 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: 'importKerasNetwork' is not recommended and will be removed in a future release. To import TensorFlow-Keras models, save using the SavedModel format and use importNetworkFromTensorFlow function.
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: 'importKerasNetwork' is not recommended and will be removed in a future release. To import TensorFlow-Keras models, save using the SavedModel format and use importNetworkFromTensorFlow function.
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: 'importKerasNetwork' is not recommended and will be removed in a future release. To import TensorFlow-Keras models, save using the SavedModel format and use importNetworkFromTensorFlow function.
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);
Warning: 'importKerasNetwork' is not recommended and will be removed in a future release. To import TensorFlow-Keras models, save using the SavedModel format and use importNetworkFromTensorFlow function.

分類するイメージを読み取ります。

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 は、出力のプレースホルダー層を挿入します。インポートした後に、findPlaceholderLayersreplaceLayer を使用して、プレースホルダー層の検索と置換をそれぞれ行えます。

例: 'OutputLayerType','regression'

ネットワークの入力イメージのサイズ。グレースケール イメージの [height,width] またはカラー イメージの [height,width,channels] にそれぞれ対応する、2 個または 3 個の数値のベクトルとして指定します。modelfile で入力サイズが指定されていない場合、ネットワークはこの情報を使用します。

modelfile 内のネットワークに複数の入力がある場合、この引数を使用して入力サイズを指定することはできません。代わりに importKerasLayers を使用してください。importKerasLayers によって、入力のプレースホルダー層が挿入されます。インポートした後に、findPlaceholderLayersreplaceLayer を使用して、プレースホルダー層の検索と置換をそれぞれ行えます。

例: 'ImageInputSize',[28 28]

出力層のクラス。categorical ベクトル、string 配列、文字ベクトルの cell 配列、または 'auto' として指定します。string 配列または文字ベクトルの cell 配列 str を指定すると、出力層のクラスが categorical(str,str) に設定されます。Classes'auto' の場合、クラスは categorical(1:N) に設定されます。ここで、N はクラスの数です。

データ型: char | categorical | string | cell

出力引数

すべて折りたたむ

事前学習済みの Keras ネットワーク。次のいずれかとして返されます。

  • Keras ネットワークのタイプが Sequential の場合、netSeriesNetwork オブジェクトです。

  • Keras ネットワークのタイプが Model の場合、netDAGNetwork オブジェクトです。

制限

  • importKerasNetwork は、次のように TensorFlow-Keras の各バージョンをサポートします。

    • この関数は、バージョン 2.2.4 までの TensorFlow-Keras を完全にサポートします。

    • この関数は、バージョン 2.2.5 ~ 2.4.0 の TensorFlow-Keras を制限付きでサポートします。

詳細

すべて折りたたむ

サポートされている 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*

層:

AveragePooling1D'mean' として指定された PaddingValue をもつ averagePooling1dLayer
AveragePooling2D'mean' として指定された PaddingValue をもつ 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
InputimageInputLayersequenceInputLayer または featureInputLayer
LSTMlstmLayer
MaxPool1DmaxPooling1dLayer
MaxPool2DmaxPooling2dLayer
MultiplymultiplicationLayer
SeparableConv2DgroupedConvolution2dLayer または convolution2dLayer
TimeDistributedsequenceFoldingLayer (ラップされた層の前) および sequenceUnfoldingLayer (ラップされた層の後)
UpSampling2Dresize2dLayer (Image Processing Toolbox)
UpSampling3Dresize3dLayer (Image Processing Toolbox)
ZeroPadding1Dnnet.keras.layer.ZeroPadding1DLayer
ZeroPadding2Dnnet.keras.layer.ZeroPadding2DLayer

* PReLU 層の場合、importKerasNetwork によって、ベクトル値のスケーリング パラメーターがベクトル要素の平均値に置き換えられます。インポートした後に、このパラメーターをベクトルに戻すことができます。例については、Keras PReLU 層のインポートを参照してください。

サポートされている 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 ライブラリを使用する生成済みのスタンドアロン コードを展開できます。あるいは、サードパーティ ライブラリの関数を呼び出さない汎用の C/C++ コードを生成することもできます。詳細については、MATLAB Coder を使用した深層学習 (MATLAB Coder)を参照してください。

  • GPU Coder を Deep Learning Toolbox と共に使用して、デスクトップまたは組み込みターゲットで実行される CUDA MEX コードまたはスタンドアロン CUDA コードを生成します。CUDA 深層ニューラル ネットワーク ライブラリ (cuDNN)、TensorRT™ 高性能推論ライブラリ、または Mali GPU 向け ARM Compute ライブラリを使用する生成済みのスタンドアロン CUDA コードを展開できます。詳細については、GPU Coder を使用した深層学習 (GPU Coder)を参照してください。

importKerasNetwork は、ネットワーク netDAGNetwork オブジェクトまたは SeriesNetwork オブジェクトとして返します。これらのオブジェクトは両方ともコード生成をサポートします。MATLAB Coder オブジェクトおよび Deep Learning Toolbox オブジェクト用の GPU Coder サポートの詳細については、サポートされているクラス (MATLAB Coder)およびサポートされているクラス (GPU Coder)をそれぞれ参照してください。

コード生成をサポートする層をもつあらゆるインポート済みネットワーク用にコードを生成できます。MATLAB Coder および GPU Coder を使用したコード生成をサポートする層のリストについては、サポートされている層 (MATLAB Coder)およびサポートされている層 (GPU Coder)をそれぞれ参照してください。各組み込み MATLAB 層のコード生成機能と制限の詳細については、各層の拡張機能の節を参照してください。例については、imageInputLayerコード生成GPU コード生成を参照してください。

GPU におけるインポートしたネットワークの使用

GPU 上では importKerasNetwork は実行されません。ただし、importKerasNetwork は、深層学習用の事前学習済みニューラル ネットワークを、GPU で使用可能な DAGNetwork オブジェクトまたは SeriesNetwork オブジェクトとしてインポートします。

  • classify を使用して、インポートしたネットワークによる予測を CPU または GPU で実行できます。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。複数の出力があるネットワークの場合、関数 predict を使用します。

  • predict を使用して、インポートしたネットワークによる予測を CPU または GPU で実行できます。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。ネットワークに複数の出力がある場合は、名前と値の引数 ReturnCategoricaltrue として指定します。

  • 関数 trainnet および 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 は、入力と出力のプレースホルダー層を挿入します。インポートした後に、findPlaceholderLayersreplaceLayer を使用して、プレースホルダー層の検索と置換をそれぞれ行えます。MIMO Keras ネットワークをインポートするワークフローは、MIMO ONNX™ ネットワークをインポートするワークフローと同じです。例については、複数の出力をもつ ONNX ネットワークのインポートと組み立てを参照してください。多入力多出力の深層学習ネットワークの詳細については、多入力および多出力ネットワークを参照してください。

  • 事前学習済みのネットワークを新しいイメージの予測または転移学習に使用するには、インポートしたモデルの学習に使用したイメージと同じようにイメージを前処理しなければなりません。最も一般的な前処理ステップは、イメージのサイズ変更、イメージの平均値の減算、イメージの BGR 形式から RGB 形式への変換です。

    • イメージのサイズを変更するには、imresize を使用します。たとえば、imresize(image,[227 227 3]) のようにします。

    • RGB 形式から BGR 形式にイメージを変換するには、flip を使用します。たとえば、flip(image,3) のようにします。

    学習および予測用のイメージの前処理の詳細については、イメージの深層学習向け前処理を参照してください。

  • MATLAB は 1 ベースのインデックスを使用しますが、Python® は 0 ベースのインデックスを使用します。つまり、配列の最初の要素のインデックスは、MATLAB と Python でそれぞれ 1 と 0 になります。MATLAB のインデックスの詳細については、配列インデックス付けを参照してください。MATLAB で、Python で作成されたインデックス (ind) の配列を使用するには、配列を ind+1 に変換します。

  • その他のヒントについては、Tips on Importing Models from TensorFlow, PyTorch, and ONNXを参照してください。

代替機能

  • HDF5 形式または JSON 形式で TensorFlow-Keras ネットワークをインポートするには、importKerasNetwork または importKerasLayers を使用します。TensorFlow ネットワークが SavedModel 形式の場合は、importTensorFlowNetwork または importTensorFlowLayers を使用します。

  • カスタム TensorFlow-Keras 層をインポートする場合、またはソフトウェアが TensorFlow-Keras 層を同等の組み込み MATLAB 層に変換できない場合、importTensorFlowNetwork または importTensorFlowLayers を使用して、カスタム層の生成を試みることができます。たとえば、importTensorFlowNetworkimportTensorFlowLayers は、TensorFlow-Keras Lambda 層をインポートするときにカスタム層を生成します。

参照

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

バージョン履歴

R2017b で導入

すべて展開する

R2023b: importKerasNetwork は削除予定

R2023b 以降、関数 importKerasNetwork は警告を出力します。代わりに importNetworkFromTensorFlow を使用してください。関数 importNetworkFromTensorFlow は、importKerasNetwork と比べて次の利点があります。

  • TensorFlow-Keras モデルを 1 回の手順で dlnetwork オブジェクトにインポートできる

  • 入出力の情報が未知であるモデルをインポートするための簡素化されたワークフローが用意されている

  • 名前と値の引数が改善され、より簡単にインポート オプションを指定できる

  • 非推奨の Keras H5 形式の代わりに、より新しい TensorFlow SavedModel 形式をサポートしている