主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

MATLAB函数ブロックを使用した仿真软件の深層学習万博1manbetx

万博1manbetx®のモデルでは,さまざまな学習済み深層学習ネットワークの予測および検出のために最適化されたコードを生成できます。MATLAB函数(万博1manbetx模型)ブロックには,関数coder.loadDeepLearningNetworkを使用して,深層学習モデルの読み込みおよびCNNクラスの作成と設定をするコードが含まれています。またこのコードには,応答を予測または検出する関数である预测检测の呼び出しが含まれています。生成コードでは,アーキテクチャを使用した深層畳み込みニューラルネットワーク(CNN),層,および入力オブジェクト(SeriesNetwork(深度学习工具箱)またはDAGNetwork(深度学习工具箱))で指定したパラメーターが実装されます。

英伟达®GPU向けのNVIDIA CUDA®深层神经网络库(cuDNN)およびTensorRT™の高性能な推論ライブラリを利用するようにコードジェネレーターを構成できます。

英特尔®プロセッサをターゲットとするときに英特尔数学内核库深层神经网络(MKL-DNN)を利用するか,手臂®プロセッサをターゲットとするときにコンピュータービジョンおよび機械学習用の手臂计算库を利用するようにコードジェネレーターを構成できます。

例:GoogLeNetを使用したイメージの分類

100年GoogLeNetは万枚を超えるイメージで学習しており,イメージを1000個のオブジェクトカテゴリ(キーボード,マグカップ,鉛筆,動物など)に分類できます。このネットワークは広範囲にわたるイメージについての豊富な特徴表現を学習しています。このネットワークは入力としてイメージを取り,イメージ内のオブジェクトのラベルを各オブジェクトカテゴリの確率と共に出力します。この例では,シミュレーションを実行して事前学習済みのgooglenet深層畳み込みニューラルネットワークのCUDAコードを生成し,イメージを分類する方法を示します。事前学習済みモデルは,深度学习工具箱™のサポートパッケージとして利用可能です。

  1. 事前学習済みのGoogLeNetネットワークを読み込みます。イメージ分類用の異なる事前学習済みネットワークの読み込みを選択できます。必要なサポートパッケージがインストールされていない場合は,示される手順に従ってソフトウェアをインストールしてください。

    网= googlenet;

  2. オブジェクトにはDAGNetworkオブジェクトが格納されています。関数analyzeNetworkを使用して,ネットワークアーキテクチャを対話的に可視化して表示し,ネットワークに関するエラーや問題を検出して,ネットワーク層についての詳細情報を表示します。層の情報には,層の活性化と学習可能なパラメーターのサイズ,学習可能なパラメーターの総数,および再帰層の状態パラメーターのサイズが含まれます。

    analyzeNetwork(净);

    分析显示GoogLeNet网络分析的网络应用。

  3. 分類するイメージのサイズは,ネットワークの入力サイズと同じでなければなりません。GoogLeNetの場合,imageInputLayerのサイズは224 x 224 x 3です。出力classificationLayerプロパティには,ネットワークによって学習されたクラスの名前が含まれています。1000年合計個のクラス名のうち10個をランダムに表示します。

    一会= net.Layers . class(结束);numClasses =元素个数(类名);disp(类名(randperm (numClasses 10)))
    “快艇”“纱窗”“等足动物”“木勺”“口红”“德雷克”“鬣狗”“哑铃”“草莓”“奶油苹果”

GoogLeNetモデルの作成

  1. 新しい仿万博1manbetx真软件モデルを作成し,[ユーザー定義関数)ライブラリからMATLAB函数ブロックを挿入します。

  2. (计算机视觉工具箱™)ライブラリから图像文件(计算机视觉工具箱)ブロックを追加し,文件名称パラメーターを[peppers.png]に設定します。计算机视觉[工具箱]ライブラリから调整(计算机视觉工具箱)ブロックをモデルに追加します。调整ブロックの[指定]パラメーターを(出力行と出力列の数)に設定し,(出力行と出力列の数)の値として”(224 224)“を入力します。このブロックにより,入力イメージのサイズがネットワークの入力層のサイズに変更されます。

    万博1manbetxSimulink模型包含使用GoogLeNet对图像进行分类的块。

  3. MATLAB函数ブロックをダブルクリックします。既定の関数シグネチャがMATLAB函数ブロックエディターに表示されます。

  4. 予測エントリポイント関数を実装する,googlenet_predictという関数を定義します。関数ヘッダーはを関数googlenet_predictの引数として宣言し,分数indxTopを戻り値として宣言します。エディタードキュメントをファイルに保存します。

    函数[分数,indxTop] = googlenet_predict(中)% # codegen持续的mynet;如果isempty(mynet) mynet = code . loaddeeplearningnetwork (“googlenet”);结束输入通过率predict_scores =预测(mynet);[分数,indx] =排序(predict_scores“下”);indxTop = indx (1:5);

    永続的なオブジェクトmynetDAGNetworkオブジェクトを読み込みます。エントリポイント関数への最初の呼び出しで,永続的なオブジェクトが作成されて設定されます。後続の関数の呼び出しでは,入力の呼び出し预测に同じオブジェクトが再利用され,ネットワークオブジェクトの再構成と再読み込みが回避されます。

  5. 特定の層のネットワーク活性化に激活(深度学习工具箱)メソッドを使用することもできます。たとえば,次のコードの行はlayerIdxで指定された層のネットワーク活性化を返します。

    出=激活(mynet layerIdx,“OutputAs”,“渠道”);

  6. 分类(深度学习工具箱)メソッドを使用して,学習済みネットワークmynetのイメージデータのクラスラベルを予測することもできます。

    [,分数]=分类(mynet,);

    LSTMネットワークに対しては,predictAndUpdateState(深度学习工具箱)メソッドとresetState(深度学习工具箱)メソッドも使用できます。これらのメソッドの使用上の注意および制限については,サポートされる関数を参照してください。

  7. MATLAB函数ブロックを右クリックし,[ブロックパラメーター(子系统)]を選択します。

  8. [コード生成)タブで,[関数のパッケージ化)について(再利用可能な関数)を選択します。

  9. これらのブロックを,次の図に示すように接続します。モデルをgooglenetModelとして保存します。

    万博1manbetx显示块之间连接的Simulink模型。

GPUによる高速化のためのモデルの構成

モデルコンフィギュレーションパラメーターにより,シミュレーション中に使用される高速化の方法が決定します。

  1. [コンフィギュレーションパラメーター]ダイアログボックスの[ソルバー]ペインを開きます。高速化のためにモデルをコンパイルし,CUDAコードを生成するには,固定ステップソルバーを使用するようにモデルを構成しなければなりません。次の表に,この例のソルバー構成を示します。

    パラメーター 設定 生成されたコードに対する影響
    タイプ 固定ステップ コード生成に必要である,一定の(固定)ステップサイズを維持します。
    ソルバー 離散(連続状態なし) モデルの状態微分の計算に固定ステップ積分手法を適用します。
    固定ステップサイズ 汽车 万博1manbetx仿真软件によりステップサイズが選択されます。

    配置参数对话框的快照显示模拟求解器选项。

  2. [シミュレーションターゲット]ペインを選択します。[言語](c++)に設定します。

  3. (GPUによる高速化)を選択します。GPU编码器™固有のオプションが,[シミュレーションターゲット],[GPUによる高速化)ペインに表示されます。この例の目的上,これらのパラメーターの既定値を使用できます。

    在模型配置参数对话框的“GPU加速”窗格中。

  4. [シミュレーションターゲット]ペインを表示します。[深層学習]グループの[ターゲットライブラリ](cuDNN)を設定します。(TensorRT)も選択できます。

    配置参数对话框的快照,显示模拟加速的深度学习选项。

  5. (好的)をクリックして[コンフィギュレーションパラメーター]ダイアログボックスを保存して閉じます。

  6. 関数set_paramを使用して,MATLAB®コマンドウィンドウからモデルパラメーターをプログラムで構成できます。次に例を示します。

    set_param (“googlenetModel”“GPUAcceleration”“上”);

GPUにより高速化されたモデルのビルド

  1. GPUにより高速化されたモデルをビルドしてシミュレートするために,[シミュレーション]タブの[実行]を選択するか,次のコマンドを実行することによってモデルを開始できます。

    sim卡(“googlenetModel”);

    上記をMATLABプロンプトで実行します。

    ソフトウェアはまず,モデルに対してCUDA / c++コードが以前にコンパイルされているかどうかを確認します。コードが以前に作成されている場合は,ソフトウェアがモデルを実行します。コードが以前にビルドされていない場合は,ソフトウェアはまずCUDA / c++コードを生成およびコンパイルし,その後モデルを実行します。コード生成ツールは,生成されたコードをslprj / _slprj / googlenetModelという名前の作業フォルダーのサブフォルダーに配置します。

  2. 上第五位つの予測ラベルとそれらに対応する確率をヒストグラムとして表示します。ネットワークはイメージを非常に多くのオブジェクトカテゴリに分類しますが,多くのカテゴリは似ているため,ネットワークを評価するときは,通常,上5位つの精度を考慮します。このネットワークは高い確率でこのイメージをピーマンとして分類します。

    我= imread (“peppers.png”);classNamesTop = classNames(out.yout{2}.Values.Data(:,: 1)) h = figure;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁,im);barh (ax2 out.yout {1} .Values.Data(1、5:1:1,1)包含(ax2,“概率”) yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“使用GoogLeNet的5大预测”

コード生成用のモデルの構成

モデルコンフィギュレーションパラメーターにより,コードの生成とビルドのプロセスのさまざまなオプションを指定できます。

  1. [コード生成)ペインを選択します。[システムターゲットファイル](grt.tlc)に変更します。嵌入式编码器®のターゲットファイル(ert.tlc)を使用することもできます。

  2. [言語](c++)に設定します。

  3. (GPUコードの生成)を選択します。GPU编码器固有のオプションが,[コード生成]、[GPUコード]ペインに表示されます。

  4. [コード生成のみ]を選択します。

  5. [ツールチェーン]を選択します。Linux®プラットフォームの場合は[NVIDIA CUDA | gmake(64位Linux)]を選択します。窗户®システムの場合は[NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)]を選択します。

  6. [コード生成]、[レポート]ペインで[コード生成レポートを作成)[レポートを自動的に開く]を選択します。

  7. [コード生成]、[インターフェイス]ペインで,[深層学習]グループの[ターゲットライブラリ](cuDNN)に設定します。(TensorRT)も選択できます。

  8. この例の目的上,[コード生成]、[GPUコード]ペインでGPU固有のパラメーターの既定値を使用できます。

    在模型配置参数对话框的“GPU代码”窗格中。

  9. (好的)をクリックして[コンフィギュレーションパラメーター]ダイアログボックスを保存して閉じます。

  10. set_paramを使用して,MATLABコマンドウィンドウからモデルパラメーターをプログラムで構成することもできます。次に例を示します。

    set_param (“googlenetModel”“GenerateGPUCode”CUDA的);

モデルのCUDAコードの生成

  1. 万博1manbetx仿真软件エディターで,万博1manbetx仿真软件编码器アプリを開きます。

  2. コードを生成します。

    診断ビューアーにメッセージが表示されます。コードジェネレーターにより,CUDAソースファイルおよびヘッダーファイルとHTMLコード生成レポートが作成されます。コードジェネレーターは実行可能ファイルを”ビルドフォルダー”(現在の作業フォルダーの中のgooglenetModel_grt_rtwという名前のサブフォルダー)に配置します。

  3. 生成されたCUDAコードの例を示します。

    googlenetModel.cu

制限

  • カスタム層をもつ深層学習ネットワークのコード生成は仿万博1manbetx真软件ではサポートされていません。

  • 英特尔数学内核库深层神经网络(MKL-DNN)を使用するには,c++ 11標準が必要です。[深層学習]グループの[ターゲットライブラリ](MKL-DNN)に設定すると,c++ 11コードが自動的に生成されます。

  • Stateflow®チャートでのMATLAB函数ブロックの使用はサポートされていません。

  • (GPUによる高速化)が有効な場合,コードジェネレーターでは,カスタム作成されたCUDAソースファイル(* .cu)のインポートに対する[カスタムコードのインポート]はサポートされません。代わりに,MATLAB函数ブロック内でcoder.cevalを使用します。

  • MATLAB函数ブロックでは,MATLAB言語のすべてのデータ型がサポートされているわけではありません。サポートされているデータ型については,ブロックのドキュメンテーションを参照してください。

参考

関数

関連するトピック