Main Content

importTensorFlowNetwork

事前学習済みの TensorFlow ネットワークのインポート

    説明

    net = importTensorFlowNetwork(modelFolder) は、SavedModel 形式 (これは TensorFlow™ 2 とのみ互換性があります) でモデルが格納されているフォルダー modelFolder から事前学習済みの TensorFlow ネットワークをインポートします。この関数は、TensorFlow-Keras の Sequential API または Functional API を使用して作成された TensorFlow ネットワークをインポートできます。importTensorFlowNetwork は、saved_model.pb ファイルで定義された層、および variables サブフォルダーに格納された学習済みの重みをインポートし、ネットワーク netDAGNetwork オブジェクトまたは dlnetwork オブジェクトとして返します。

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

    メモ

    カスタムの TensorFlow 層をインポートしたとき、またはソフトウェアが TensorFlow 層をそれと等価な組み込みの MATLAB® 層に変換できないとき、importTensorFlowNetwork はカスタム層の生成を試みます。ソフトウェアによる変換がサポートされている層の一覧については、組み込みの MATLAB 層への変換がサポートされている TensorFlow-Keras 層を参照してください。

    importTensorFlowNetwork は、生成されたカスタム層および関連する TensorFlow 演算子をパッケージ +modelFolder に保存します。

    importTensorFlowNetwork は、組み込みの MATLAB 層への変換がサポートされていない各 TensorFlow 層のカスタム層を自動生成しません。サポートされていない層の処理方法の詳細については、ヒントを参照してください。

    net = importTensorFlowNetwork(modelFolder,Name,Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用して、事前学習済みの TensorFlow ネットワークをインポートします。たとえば、'OutputLayerType','classification' はネットワークを DAGNetwork としてインポートしますが、その際、インポートされたネットワーク アーキテクチャの末尾に分類出力層が追加されます。

    すべて折りたたむ

    SavedModel 形式で保存された事前学習済みの TensorFlow ネットワークを DAGNetwork オブジェクトとしてインポートし、インポートしたネットワークを使用してイメージを分類します。

    モデル フォルダーを指定します。

    if ~exist('digitsDAGnet','dir')
        unzip('digitsDAGnet.zip')
    end
    modelFolder = './digitsDAGnet';

    クラス名を指定します。

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

    SavedModel 形式で保存された TensorFlow ネットワークをインポートします。既定では、importTensorFlowNetwork はネットワークを DAGNetwork オブジェクトとしてインポートします。イメージ分類問題用に出力層のタイプを指定します。

    net = importTensorFlowNetwork(modelFolder,'OutputLayerType','classification','Classes',classNames)
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation. Assembling network...
    Import finished.
    
    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')

    分類するイメージを読み取り、そのイメージのサイズを表示します。このイメージは、サイズが 28×28 ピクセルであるグレースケール (1 チャネル) のイメージです。

    digitDatasetPath = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
    I = imread(fullfile(digitDatasetPath,'5','image4009.png'));
    size(I)
    ans = 1×2
    
        28    28
    
    

    ネットワークの入力サイズを表示します。今回の場合、イメージ サイズはネットワークの入力サイズと一致しています。それらが一致していない場合は、imresize(I, netInputSize(1:2)) を使用してイメージのサイズを変更しなければなりません。

    net.Layers(1).InputSize
    ans = 1×3
    
        28    28     1
    
    

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

    label = classify(net,I);

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

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

    SavedModel 形式で保存された事前学習済みの TensorFlow ネットワークを dlnetwork オブジェクトとしてインポートし、インポートしたネットワークを使用してクラス ラベルを予測します。

    モデル フォルダーを指定します。

    if ~exist('digitsDAGnet','dir')
        unzip('digitsDAGnet.zip')
    end
    modelFolder = './digitsDAGnet';

    クラス名を指定します。

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

    SavedModel 形式で保存された TensorFlow ネットワークを dlnetwork オブジェクトとしてインポートします。

    net = importTensorFlowNetwork(modelFolder,'TargetNetwork','dlnetwork')
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation. Assembling network...
    Import finished.
    
    net = 
      dlnetwork with properties:
    
             Layers: [12×1 nnet.cnn.layer.Layer]
        Connections: [12×2 table]
         Learnables: [6×3 table]
              State: [0×3 table]
         InputNames: {'input_1'}
        OutputNames: {'activation_1'}
        Initialized: 1
    
    

    分類するイメージを読み取り、そのイメージのサイズを表示します。このイメージは、サイズが 28×28 ピクセルであるグレースケール (1 チャネル) のイメージです。

    digitDatasetPath = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
    I = imread(fullfile(digitDatasetPath,'5','image4009.png'));
    size(I)
    ans = 1×2
    
        28    28
    
    

    ネットワークの入力サイズを表示します。今回の場合、イメージ サイズはネットワークの入力サイズと一致しています。それらが一致していない場合は、imresize(I, netInputSize(1:2)) を使用してイメージのサイズを変更しなければなりません。

    netInputSize = net.Layers(1).InputSize
    netInputSize = 1×3
    
        28    28     1
    
    

    イメージを dlarray に変換します。イメージを次元 'SSCB' (spatial、spatial、channel、batch) で書式設定。この場合、バッチ サイズは 1 であるため、バッチ サイズを省略できます ('SSC')。

    I_dlarray = dlarray(single(I),'SSCB');

    サンプル イメージを分類し、予測されたラベルを見つけます。

    prob = predict(net,I_dlarray);
    [~,label] = max(prob);

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

    imshow(I)
    title(['Classification result ' classNames{label}]) 

    SavedModel 形式で保存された事前学習済みの TensorFlow ネットワークを DAGNetwork オブジェクトとしてインポートし、インポートしたネットワークを使用してイメージを分類します。インポートしたネットワークには、組み込みの MATLAB 層への変換がサポートされていない層が含まれています。これらの層をインポートすると、カスタム層がソフトウェアによって自動生成されます。

    この例では、補助関数 findCustomLayers を使用します。この関数のコードを見るには、補助関数を参照してください。

    モデル フォルダーを指定します。

    if ~exist('digitsDAGnetwithnoise','dir')
        unzip('digitsDAGnetwithnoise.zip')
    end
    modelFolder = './digitsDAGnetwithnoise';

    クラス名を指定します。

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

    SavedModel 形式で保存された TensorFlow ネットワークをインポートします。既定では、importTensorFlowNetwork はネットワークを DAGNetwork オブジェクトとしてインポートします。イメージ分類問題用に出力層のタイプを指定します。

    net = importTensorFlowNetwork(modelFolder,'OutputLayerType','classification','Classes',classNames);
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation. Assembling network...
    Import finished.
    

    インポートしたネットワークに、組み込みの MATLAB 層への変換がサポートされていない層が含まれている場合、importTensorFlowNetwork は、これらの層の代わりにカスタム層を自動生成できます。importTensorFlowNetwork は、生成した各カスタム層を、現在のフォルダー内のパッケージ +digitsDAGnetwithnoise に個別の .m ファイルとして保存します。

    補助関数 findCustomLayers を使用して、自動生成されたカスタム層のインデックスを見つけ、このカスタム層を表示します。

    ind = findCustomLayers(net.Layers,'+digitsDAGnetwithnoise');
    net.Layers(ind)
    ans = 
      2×1 Layer array with layers:
    
         1   'gaussian_noise_1'   GaussianNoise   digitsDAGnetwithnoise.kGaussianNoise1Layer3766
         2   'gaussian_noise_2'   GaussianNoise   digitsDAGnetwithnoise.kGaussianNoise2Layer3791
    

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

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

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

    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)])

    補助関数

    この節では、この例で使用されている補助関数 findCustomLayers のコードを示します。findCustomLayers は、importTensorFlowNetwork によって自動生成されたカスタム層の indices を返します。

    function indices = findCustomLayers(layers,PackageName)
    
    s = what(['.\' PackageName]);
    
    indices = zeros(1,length(s.m));
    for i = 1:length(layers)
        for j = 1:length(s.m)
            if strcmpi(class(layers(i)),[PackageName(2:end) '.' s.m{j}(1:end-2)])
                indices(j) = i;
            end
        end
    end
    
    end

    入力引数

    すべて折りたたむ

    TensorFlow モデルが含まれるフォルダーの名前。文字ベクトルまたは string スカラーとして指定します。modelFolder は現在のフォルダー内になければなりません。そうでない場合は、フォルダーへの絶対パスまたは相対パスを指定しなければなりません。modelFolder には、ファイル saved_model.pb およびサブフォルダー variables が含まれていなければなりません。このフォルダーには、サブフォルダー assets および assets.extra も含めることができます。

    • ファイル saved_model.pb には、層グラフのアーキテクチャと学習オプション (オプティマイザー、損失、メトリクスなど) が格納されます。

    • サブフォルダー variables には、事前学習済みの TensorFlow ネットワークによって学習された重みが格納されます。既定では、importTensorFlowNetwork は重みをインポートします。

    • サブフォルダー assets には、層グラフが使用できる補足ファイル (語彙など) が格納されます。importTensorFlowNetwork は、このファイルを assets にインポートしません。

    • サブフォルダー assets.extra には、層グラフと共存する補足ファイル (ユーザーのための情報など) が格納されます。

    例: 'MobileNet'

    例: './MobileNet'

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

    例: importTensorFlowNetwork(modelFolder,'TargetNetwork','dagnetwork','OutputLayerType','classification') は、ネットワークを DAGNetwork オブジェクトとして modelFolder からインポートし、自動生成したカスタム層を現在のフォルダー内のパッケージ +modelFolder に保存して、インポートしたネットワーク アーキテクチャの末尾に分類出力層を追加します。

    importTensorFlowNetwork がカスタム層を保存するパッケージの名前。文字ベクトルまたは string スカラーとして指定します。importTensorFlowNetwork は、カスタム層のパッケージ +PackageName を現在のフォルダーに保存します。'PackageName' を指定しない場合、importTensorFlowNetwork は、カスタム層を現在のフォルダー内の +modelFolder という名前のパッケージに保存します。パッケージの詳細については、パッケージによる名前空間の作成を参照してください。

    カスタムの TensorFlow 層をインポートしたとき、またはソフトウェアが TensorFlow 層をそれと等価な組み込みの MATLAB 層に変換できないとき、importTensorFlowNetwork はカスタム層の生成を試みます。importTensorFlowNetwork は、生成した各カスタム層を、+PackageName で個別の .m ファイルとして保存します。カスタム層を表示または編集するには、関連する .m ファイルを開きます。カスタム層の詳細については、深層学習のカスタム層を参照してください。

    パッケージ +PackageName には、サブパッケージ +ops を含めることもできます。このサブパッケージには、自動生成されたカスタム層で使用される TensorFlow 演算子 (サポートされている TensorFlow 演算子を参照) に対応する MATLAB 関数が格納されます。importTensorFlowNetwork は、各演算子に関連する MATLAB 関数をサブパッケージ +ops 内の個別の .m ファイルに保存します。dlnetwork のオブジェクト関数 (関数 predict など) は、カスタム層とやり取りするときにこれらの演算子を使用します。

    例: 'PackageName','MobileNet'

    例: 'PackageName','CustomLayers'

    Deep Learning Toolbox ネットワークのターゲット タイプ。'dagnetwork' または 'dlnetwork' として指定します。

    • ネットワークを DAGNetwork オブジェクトとしてインポートするには、'TargetNetwork'dagnetwork' として指定します。この場合、net には、TensorFlow の SavedModel 損失関数または名前と値の引数 'OutputLayerType' によって指定された出力層が含まれていなければなりません。

    • ネットワークを dlnetwork オブジェクトとしてインポートするには、'TargetNetwork'dlnetwork' として指定します。この場合、net には出力層が含まれません。

    例: 'TargetNetwork','dlnetwork'

    インポートされたネットワーク アーキテクチャの最後に importTensorFlowNetwork によって追加される出力層のタイプ。'classification''regression'、または 'pixelclassification' として指定します。pixelClassificationLayer (Computer Vision Toolbox) オブジェクトを追加するには、Computer Vision Toolbox™ が必要です。

    • 'TargetNetwork''dagnetwork' として指定し、modelFolder 内の SavedModel によって損失関数が指定されていない場合、名前と値の引数 'OutputLayerType' に値を割り当てなければなりません。DAGNetwork オブジェクトは出力層をもたなければなりません。

    • 'TargetNetwork''dlnetwork' として指定した場合、importTensorFlowNetwork は名前と値の引数 'OutputLayerType' を無視します。dlnetwork オブジェクトは出力層をもちません。

    例: 'OutputLayerType','classification'

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

    例: 'ImageInputSize',[28 28]

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

    • 'TargetNetwork''dagnetwork' として指定した場合、importTensorFlowNetwork は、クラスに関する情報を DAGNetwork オブジェクトの出力層に保存します。

    • 'TargetNetwork''dlnetwork' として指定した場合、importTensorFlowNetwork は名前と値の引数 'Classes' を無視します。dlnetwork オブジェクトは、クラスに関する情報を保存する出力層をもちません。

    例: 'Classes',{'0','1','3'}

    例: 'Classes',categorical({'dog','cat'})

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

    コマンド ウィンドウにインポートの進行状況を表示するかどうかのインジケーター。数値または logical の 1 (true) か 0 (false) として指定します。

    例: 'Verbose','true'

    出力引数

    すべて折りたたむ

    事前学習済みの TensorFlow ネットワーク。DAGNetwork オブジェクトまたは dlnetwork オブジェクトとして返されます。

    • ネットワークを DAGNetwork オブジェクトとしてインポートするには、'TargetNetwork'dagnetwork' として指定します。その後、DAGNetwork オブジェクト上で、関数 classify を使用してクラス ラベルを予測します。

    • ネットワークを dlnetwork オブジェクトとしてインポートするには、'TargetNetwork'dlnetwork' として指定します。その後、dlnetwork オブジェクト上で、関数 predict を使用してクラス ラベルを予測します。正しいデータ形式を使用して、入力データを dlarray として指定します (詳細については、dlarray の引数 fmt を参照してください)。

    制限

    • importTensorFlowNetwork は、TensorFlow バージョン v2.0 ~ 2.6 をサポートします。

    詳細

    すべて折りたたむ

    組み込みの MATLAB 層への変換がサポートされている TensorFlow-Keras 層

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

    サポートされている TensorFlow-Keras 損失関数

    importTensorFlowNetwork は、次の Keras 損失関数をサポートします。

    • mean_squared_error

    • categorical_crossentropy

    • sparse_categorical_crossentropy

    • binary_crossentropy

    サポートされている TensorFlow 演算子

    importTensorFlowNetwork は、dlarray がサポートされた MATLAB 関数への変換を行う次の TensorFlow 演算子をサポートします。

    TensorFlow 演算子対応する MATLAB 関数
    AddtfAdd
    AddNtfAddN
    AddV2tfAdd
    Assertassert
    AvgPooltfAvgPool
    BatchMatMulV2tfBatchMatMulV2
    BiasAddtfBiasAdd
    BroadcastTotfBroadcastTo
    CasttfCast
    ConcatV2tfCat
    Constなし (カスタム層内の重みに変換される)
    Conv2DtfConv2D
    DepthToSpacedepthToSpace (Image Processing Toolbox)
    DepthwiseConv2dNativetfDepthwiseConv2D
    Expexp
    ExpandDimstfExpandDims
    FusedBatchNormV3tfBatchnorm
    GatherV2tfGather
    GreaterEqualge, >=
    Identityなし (カスタム層内の値の割り当てに変換される)
    IdentityNtfIdentityN
    L2LosstfL2Loss
    LeakyReluleakyrelu
    Lesslt, <
    Loglog
    MatMultfMatMul
    MaxPooltfMaxPool
    MaximumtfMaximum
    MeantfMean
    MinimumtfMinimum
    MirrorPadtfMirrorPad
    MultfMul
    Negminus, -
    PacktfStack
    PadtfPad
    PadV2tfPad
    PartitionedCallなし (カスタム層のメソッド内の関数に変換される)
    Powpower, .^
    ProdtfProd
    RandomStandardNormaltfRandomStandardNormal
    RangetfRange
    ReadVariableOpなし (カスタム層内の値の割り当てに変換される)
    RealDivtfDiv
    Relurelu
    Relu6relu および min
    ReshapetfReshape
    ResizeNearestNeighbordlresize (Image Processing Toolbox)
    Rsqrtsqrt
    ShapetfShape
    Sigmoidsigmoid
    SizetfSize
    Softmaxsoftmax
    SpaceToDepthspaceToDepth (Image Processing Toolbox)
    Square.^2
    Sqrtsqrt
    SquaredDifferencetfMul または tfSub
    SqueezetfSqueeze
    StatefulPartitionedCallなし (カスタム層のメソッド内の関数に変換される)
    StopGradienttfStopGradient
    StridedSlicetfStridedSlice または tfSqueeze
    SubtfSub
    Tanhtanh
    TiletfTile
    TransposetfTranspose

    dlarray オブジェクトを操作する関数の詳細については、dlarray をサポートする関数の一覧を参照してください。

    インポートされたネットワーク用のコードの生成

    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)を参照してください。

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

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

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

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

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

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

    • ネットワークを dlnetwork オブジェクトとしてインポートした場合、predict を使用して、インポートしたネットワークによる予測を CPU または GPU で実行できます。入力データとネットワーク パラメーターのいずれかが GPU に保存されている場合、関数 predict を GPU で実行できます。

      • minibatchqueue を使用して入力データのミニバッチの処理と管理を行う場合、GPU が使用可能であれば、出力は minibatchqueue オブジェクトによって GPU 配列に変換されます。

      • dlupdate を使用して、dlnetwork オブジェクトの学習可能パラメーターを GPU 配列に変換します。

        net = dlupdate(@gpuArray,net)

    • trainNetwork を使用することにより、インポートしたネットワークに 1 つの CPU または 1 つの GPU で学習させることができます。実行環境のオプションを含む学習オプションを指定するには、関数 trainingOptions を使用します。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。学習を高速化する方法の詳細については、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。

    GPU を使用するには Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。

    ヒント

    • インポートしたネットワークに、組み込みの MATLAB 層への変換がサポートされていない層が含まれており (組み込みの MATLAB 層への変換がサポートされている TensorFlow-Keras 層を参照)、importTensorFlowNetwork がカスタム層を生成しない場合、importTensorFlowNetwork はエラーを返します。この場合でも、importTensorFlowLayers を使用してネットワーク アーキテクチャをインポートできます。

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

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

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

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

    • パッケージ +PackageName の親フォルダーが MATLAB パス上にない場合、このパッケージのメンバー (カスタム層および TensorFlow 演算子) にアクセスすることはできません。詳細については、パッケージと MATLAB パスを参照してください。

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

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

    代替機能

    TensorFlow ネットワークを SavedModel 形式でインポートするには、importTensorFlowNetwork または importTensorFlowLayers を使用します[2]。または、ネットワークが HDF5 形式か JSON 形式の場合は、importKerasNetworkimportKerasLayers を使用してネットワークをインポートします。

    参照

    [2] Using the SavedModel format. https://www.tensorflow.org/guide/saved_model.

    バージョン履歴

    R2021a で導入