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

coder.loadDeepLearningNetwork

深層学習ネットワーク モデルの読み込み

説明

net = coder.loadDeepLearningNetwork(filename) は、filename MAT ファイルに保存された事前学習済みの深層学習 SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトを読み込みます。filename は、単一の SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトが含まれた、MATLAB® パス上に存在する有効な MAT ファイルでなければなりません。

net = coder.loadDeepLearningNetwork(functionname) は、事前学習済みの深層学習 SeriesNetwork または DAGNetwork オブジェクトを返す関数を呼び出します。functionname は、SeriesNetwork または DAGNetwork オブジェクトを返す、MATLAB パス上に存在する関数の名前でなければなりません。

net = coder.loadDeepLearningNetwork(___,network_name) は、net = coder.loadDeepLearningNetwork(filename) と同じですが、ネットワークから生成される C++ クラスに名前を付けるためのオプションを指定しています。network_name は、MAT ファイルに保存されているネットワーク オブジェクトの記述名か、関数の参照先のネットワーク オブジェクトの記述名です。ネットワークの名前は、C++ の有効な識別子である char 型でなければなりません。

ネットワーク オブジェクト推論からコードを生成する場合、この関数を使用します。この関数は、このネットワークから C++ クラスを生成します。クラス名は MAT ファイル名または関数名から派生します。

すべて折りたたむ

関数 coder.loadDeepLearningNetwork を使用して VGG-16 系列ネットワークを読み込み、このネットワークの C++ コードを生成します。

事前学習済みの VGG-16 ネットワークを含む MAT ファイルを取得します。

url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/VGG/vgg16.mat';
websave('vgg16.mat',url);

関数 coder.loadDeepLearningNetwork を使用して vgg16.mat を永続 mynet SeriesNetwork オブジェクトに読み込むエントリポイント関数 myVGG16 を作成します。

function out = myVGG16(in)

persistent mynet;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('vgg16.mat', 'myVGGnet');
end

out = predict(mynet,in);

この永続オブジェクトによって、入力に対して predict メソッドを呼び出す関数のそれ以降の呼び出し時に、ネットワーク オブジェクトの再構成と再読み込みが回避されます。

事前学習済みの VGG-16 ネットワークの入力層は、サイズが 224x224x3 のイメージを受け入れます。以下のコード行を使用してグラフィックス ファイルから入力イメージを読み取り、そのサイズを 224x224 に変更します。

in = imread('peppers.png');
in = imresize(in,[224,224]);

MEX コード生成用に coder.config 構成オブジェクトを作成し、ターゲット言語を C++ に設定します。この構成オブジェクトでは、targetlib'mkldnn' にして DeepLearningConfig を設定します。関数 codegen は、MATLAB 関数入力のサイズ、クラス、および実数/複素数を決定しなければなりません。-args オプションを使用して、エントリポイント関数の入力のサイズを指定します。-config オプションを使用してコード構成オブジェクトを渡します。

cfg = coder.config('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); 
codegen -args {ones(224,224,3,'uint8')} -config cfg myVGG16 -report;

codegen コマンドはすべての生成されたファイルを codegen フォルダーに配置します。このフォルダーには、エントリポイント関数 myVGG16.cpp の C++ コード、ヘッダー ファイル、畳み込みニューラル ネットワーク (CNN) の C++ クラス定義を含むソース ファイル、重みファイル、およびバイアス ファイルが含まれます。

入力イメージで VGG-16 predict を呼び出し、上位 5 つの予測されたラベルを表示します。

predict_scores = myVGG16_mex(in);
[scores,indx] = sort(predict_scores, 'descend');
net = coder.loadDeepLearningNetwork('vgg16.mat');
classNames = net.Layers(end).Classes;
disp(classNames(indx(1:5)));
     bell pepper 
     cucumber 
     grocery store 
     acorn squash 
     butternut squash 

関数 coder.loadDeepLearningNetwork を使用して resnet50 系列ネットワークを読み込み、このネットワークから CUDA® コードを生成します。

関数 coder.loadDeepLearningNetwork を使用して Deep Learning Toolbox™ のツールボックス関数 resnet50 を呼び出すエントリポイント関数 resnetFun を作成します。この関数は事前学習済みの ResNet-50 ネットワークを返します。

function out = resnetFun(in)

persistent mynet;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('resnet50', 'myresnet');
end

out = predict(mynet,in);

この永続オブジェクトによって、入力に対して predict メソッドを呼び出す関数のそれ以降の呼び出し時に、ネットワーク オブジェクトの再構成と再読み込みが回避されます。

事前学習済みの ResNet-50 ネットワークの入力層は、サイズが 224x224x3 のイメージを受け入れます。グラフィックス ファイルから入力イメージを読み取り、そのサイズを 224x224 に変更するには、次のコード行を使用します。

in = imread('peppers.png');
in = imresize(in,[224,224]);

MEX コード生成用に coder.gpuConfig 構成オブジェクトを作成し、ターゲット言語を C++ に設定します。関数 codegen は、MATLAB 関数入力のサイズ、クラス、および実数/複素数を決定しなければなりません。-args オプションを使用してエントリポイント関数の入力のサイズを指定し、-config オプションを使用してコード構成オブジェクトを渡します。

cfg = coder.gpuConfig('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); 
codegen -args {ones(224,224,3,'uint8')} -config cfg resnetFun -report;

codegen コマンドはすべての生成されたファイルを codegen フォルダーに配置します。ここには、エントリポイント関数 resnetFun.cu の CUDA コード、ヘッダー ファイル、畳み込みニューラル ネットワーク (CNN) の C++ クラス定義を含むソース ファイル、重みファイル、およびバイアス ファイルが含まれます。

入力引数

すべて折りたたむ

事前学習済みの SeriesNetwork または DAGNetwork オブジェクトを含む MAT ファイルの名前を指定します。

データ型: string

事前学習済みの SeriesNetwork または DAGNetwork オブジェクトを返す関数の名前を指定します。

データ型: string

MAT ファイルに保存された SeriesNetwork オブジェクトの記述名。これは、C++ の有効な識別子である char 型でなければなりません。

データ型: char

出力引数

すべて折りたたむ

ネットワーク推論。SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトとして返されます。

制限

  • coder.loadDeepLearningNetwork は複数のネットワークを含む MAT ファイルの読み込みをサポートしていません。MAT ファイルには、読み込まれるネットワークのみが含まれていなければなりません。

R2017b で導入