ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

importKerasNetwork

事前学習済みの Keras ネットワークおよび重みのインポート

構文

net = importKerasNetwork(modelfile)
net = importKerasNetwork(modelfile,'Name',Value)

説明

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

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

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

メモ

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

net = importKerasNetwork(modelfile,'Name',Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、TensorFlow -Keras ネットワーク アーキテクチャと重みをインポートします。

たとえば、importKerasNetwork(modelfile,'WeightFile',weights) は、モデル ファイル modelfile からネットワーク アーキテクチャを、重みファイル weights から重みをインポートします。この場合、modelfile は HDF5 または JSON (.json) 形式にできます。重みファイルは HDF5 形式でなければなりません。

すべて折りたたむ

Neural Network Toolbox Importer for TensorFlow -Keras Models サポート パッケージをダウンロードしてインストールします。

サポート パッケージはアドオン ギャラリーからインストールできます。MATLAB® デスクトップの [アドオン] ドロップダウン メニューで [アドオンの入手] を選択します。アドオン ファイルは "MathWorks の機能" セクションにあります。Neural Network Toolbox Importer for TensorFlow -Keras Models を選択します。サポート パッケージをインストールするには、リンクをクリックして、[インストール] をクリックします。アドオンの検索とインストールの詳細は、アドオンの入手 (MATLAB)を参照してください。

インポートするファイルを指定します。

modelfile = 'digitsDAGnet.h5';

これは、数字データで学習させた有向非循環グラフ畳み込みニューラル ネットワークです。

ネットワークをインポートします。

net = importKerasNetwork(modelfile)
Warning: Saved Keras networks do not include class names. Class names will be set to "1","2",...,"N", where
N is the number of units in the softmax layer.  To specify class names, use the 'ClassNames' argument. 
> In nnet.internal.cnn.keras.createDAGNetwork (line 19)
  In nnet.internal.cnn.keras.importKerasNetwork (line 31)
  In importKerasNetwork (line 78) 

net = 

  DAGNetwork with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

  

コマンド ウィンドウにネットワーク層を表示します。

net.Layers
ans = 

  13x1 Layer array with layers:

     1   'input_1'                            Image Input             28x28x1 images
     2   'conv2d_1'                           Convolution             20 7x7x1 convolutions with stride [1  1] and padding 'same'
     3   'conv2d_1_relu'                      ReLU                    ReLU
     4   'conv2d_2'                           Convolution             20 3x3x1 convolutions with stride [1  1] and padding 'same'
     5   'conv2d_2_relu'                      ReLU                    ReLU
     6   'max_pooling2d_1'                    Max Pooling             2x2 max pooling with stride [2  2] and padding 'same'
     7   'max_pooling2d_2'                    Max Pooling             2x2 max pooling with stride [2  2] and padding 'same'
     8   'flatten_1'                          Flatten C-style         Flatten activations into 1D assuming C-style (row-major) order
     9   'flatten_2'                          Flatten C-style         Flatten activations into 1D assuming C-style (row-major) order
    10   'concatenate_1'                      Depth concatenation     Depth concatenation of 2 inputs
    11   'dense_1'                            Fully Connected         10 fully connected layer
    12   'activation_1_softmax'               Softmax                 softmax
    13   'ClassificationLayer_activation_1'   Classification Output   crossentropyex with '1', '2', and 8 other classes

  

コマンド ウィンドウにネットワーク結合を表示します。

net.Connections
ans =

  13×2 table

            Source                       Destination            
    ______________________    __________________________________

    'input_1'                 'conv2d_1'                        
    'input_1'                 'conv2d_2'                        
    'conv2d_1'                'conv2d_1_relu'                   
    'conv2d_1_relu'           'max_pooling2d_1'                 
    'conv2d_2'                'conv2d_2_relu'                   
    'conv2d_2_relu'           'max_pooling2d_2'                 
    'max_pooling2d_1'         'flatten_1'                       
    'max_pooling2d_2'         'flatten_2'                       
    'flatten_1'               'concatenate_1/in1'               
    'flatten_2'               'concatenate_1/in2'               
    'concatenate_1'           'dense_1'                         
    'dense_1'                 'activation_1_softmax'            
    'activation_1_softmax'    'ClassificationLayer_activation_1'

  

ネットワーク アーキテクチャをプロットします。

if isa(net,'DAGNetwork')
    figure;
    plot(net);
    title('DAG Network Architecture');
end

インポートするネットワーク ファイルと重みファイルを指定します。

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

これは、数字データで学習させた有向非循環グラフ畳み込みニューラル ネットワークです。

ネットワーク アーキテクチャと重みを別々のファイルからインポートします。.json ファイルには、出力層、つまりコスト関数の情報がありません。ファイルをインポートするときに、出力層のタイプを指定します。

net = importKerasNetwork(modelfile,'WeightFile',weights, ...
      'OutputLayerType','classification')
Warning: Saved Keras networks do not include class names. Class names will be set to "1","2",...,"N",
where N is the number of classes in the classification output layer of the network.  To specify class
names, use the 'ClassNames' argument. 
> In nnet.internal.cnn.keras.createDAGNetwork (line 19)
  In nnet.internal.cnn.keras.importKerasNetwork (line 31)
  In importKerasNetwork (line 84) 

net = 

  DAGNetwork with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

 

モデル ファイルを指定します。

modelfile = 'digitsDAGnet.h5';

クラス名を指定します。

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

クラス名を使用して Keras ネットワークをインポートします。

net = importKerasNetwork(modelfile,'ClassNames',classnames);

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

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

事前学習済みのネットワークを使用してイメージを分類します。

label = classify(net,I);

イメージと分類結果を表示します。

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

入力引数

すべて折りたたむ

学習済みのネットワーク アーキテクチャと重み (場合による) が含まれる Keras モデル ファイルの名前。文字ベクトルとして指定します。modelfile に含まれているものが。

  • ネットワーク アーキテクチャと重みの場合、HDF5 (.h5) 形式でなければなりません。

  • ネットワーク アーキテクチャのみの場合、HDF5 または JSON (.json) 形式にできます。この場合、名前と値のペアの引数 'WeighFile' を使用して、重みを HDF5 ファイルで指定しなければなりません。

modelfile は、MATLAB® パス上のフォルダー内の現在のフォルダーに含まれていなければならず、そうでなければこのファイルの絶対パスまたは相対パスを含めなければなりません。

例: 'digitsnet.h5'

データ型: char

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 ' ' で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前/値のペア引数を、任意の順番で指定できます。

例: importKerasNetwork(modelfile,'OutputLayerType','classification','ClassNames',imagelabels) は、importKerasNetwork に Keras の層の最後に分類問題用の出力層を配置するように指定し、クラス名を imagelabels に指定します。

重みファイル名。文字ベクトルとして指定します。MATLAB パス上のフォルダー内の現在のフォルダーに WeightFile が含まれていなければならず、そうでなければこのファイルの絶対パスまたは相対パスを含めなければなりません。重みのないネットワーク層をインポートするには、importKerasLayers を参照してください。

例: 'WeightFile','weights.h5'

データ型: char

modelfile で損失関数が指定されていない場合、インポートされたネットワーク アーキテクチャの最後に importKerasNetworks が追加する出力層のタイプ。'classification' または 'regression' で指定します。

例: 'OutputLayerType','regression'

データ型: char

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

例: 'ImageInputSize',[28 28]

データ型: double

分類問題のクラス名。string 配列または文字ベクトルの cell 配列として指定します。クラス名を指定しない場合、importKerasNetwork は、1 から K の整数の string 配列をクラス名として割り当てます。K はクラスの数です。

例: 'ClassNames',{'class1','class2','class3'}

データ型: cell | string

出力引数

すべて折りたたむ

事前学習済みの Keras ネットワーク。Keras ネットワークのタイプが 'Sequential' の場合は SeriesNetwork オブジェクトとして返され、Keras ネットワークのタイプが 'Model' の場合は DAGNetwork オブジェクトとして返されます。

ヒント

  • importKerasNetwork は、以下の Keras 層タイプのネットワークをインポートできます。ネットワークに他のタイプの層が含まれる場合、エラー メッセージが返されます。ネットワーク アーキテクチャと重みのみをインポートするには、関数 importKerasLayers を使用します。

    サポートされている Keras の層

    Keras の層NNET の層関数

    Add

    additionLayer

    Activation (活性化の名前を指定):

    • relu

    • linear

    • softmax

    • sigmoid

    • tanh

    reluLayer

    softmaxLayer

    nnet.keras.layer.SigmoidLayer

    nnet.keras.layer.TanhLayer

    AveragePooling2D

    averagePooling2dLayer

    BatchNormalization

    BatchNormalizationLayer

    Concatenate

    depthConcatenationLayer

    Conv2D

    convolution2dLayer

    Conv2DTranspose

    transposedConv2dLayer

    Dense

    fullyConnectedLayer

    Dropout

    dropoutLayer

    Flatten

    nnet.keras.layer.FlattenCStyleLayer

    GlobalAveragePooling2D

    nnet.keras.layer.GlobalAveragePoling2DLayer

    Input

    imageInputLayer

    LeakyReLU

    leakyReluLayer

    MaxPooling2D

    maxPooling2dLayer

    ZeroPadding2D

    nnet.keras.layer.ZeroPadding2DLayer

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

    • イメージのサイズを変更するには、imresize を使用します。例: imresize(image,[227,227,3])

    • BGR 形式から RGB 形式にイメージを変換するには、flip を使用します。例: flip(image,3)

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

参照

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

R2017b で導入