Main Content

ディープ ネットワーク デザイナー

深層学習ネットワークの設計、可視化、および学習

説明

ディープ ネットワーク デザイナー アプリでは、深層学習ネットワークの構築、可視化、編集、および学習ができます。このアプリを使って次のことを実行できます。

  • Each image shows a digit from 0 to 9, rotated by a certain angleネットワークを構築、インポート、編集、および結合する。

  • 事前学習済みのネットワークを読み込み、転移学習用に編集する。

  • 層のプロパティを表示および編集し、新しい層と結合を追加する。

  • ネットワークを解析してネットワーク アーキテクチャの定義が正しいことを確認し、学習の前に問題を検出する。

  • 学習および検証のためのデータストアおよびイメージ データをインポート、可視化する。

  • イメージ分類学習データへ拡張を適用し、クラス ラベルの分布を可視化する。

  • ネットワークに学習させ、精度、損失、検証メトリクスのプロットを使用した学習を監視する。

  • 学習済みネットワークをワークスペースまたは Simulink® にエクスポートする。

  • ネットワークの構築と学習を行う MATLAB® コードを生成し、実験マネージャーを使用してハイパーパラメーター調整のための実験を作成する。

Deep Network Designer app

ディープ ネットワーク デザイナー アプリを開く

  • MATLAB ツールストリップ: [アプリ] タブの [機械学習および深層学習] にあるアプリ アイコンをクリックします。

  • MATLAB コマンド プロンプト: deepNetworkDesigner と入力します。

すべて展開する

ディープ ネットワーク デザイナーで事前学習済みのネットワークを調べます。

アプリを開き、事前学習済みのネットワークを選択します。[デザイナー] タブを選択し、[新規] をクリックして事前学習済みのネットワークを読み込むこともできます。ネットワークをダウンロードする必要がある場合は、[インストール] をクリックしてアドオン エクスプローラーを開きます。ディープ ネットワーク デザイナーには、イメージ タスクやオーディオ タスクに適した事前学習済みのネットワークが用意されています。事前学習済みのオーディオ ネットワークを読み込むには、Audio Toolbox™ が必要です。

ヒント

はじめに、SqueezeNet や GoogLeNet などのより高速なイメージ分類ネットワークの 1 つを選択してみてください。どの設定が適切に機能するかを理解したら、Inception-v3 や ResNet などのより正確なネットワークを試し、結果が改善されるか確認します。事前学習済みのネットワークの選択の詳細については、事前学習済みの深層ニューラル ネットワークを参照してください。

Deep Network Designer start page showing available networks

[デザイナー] ペインでは、ネットワークを可視化して確認します。使用可能な事前学習済みイメージ分類ネットワークの一覧、およびそれらを比較する方法については、事前学習済みの深層ニューラル ネットワークを参照してください。

Deep Network Designer displaying a pretrained image classification network

ディープ ネットワーク デザイナーによるネットワーク構築の詳細については、ディープ ネットワーク デザイナーを使用したネットワークの構築を参照してください。

ディープ ネットワーク デザイナーで転移学習用のネットワークを編集して、準備します。

転移学習は、事前学習済みの深層学習ネットワークを利用して、新しいタスクを学習するように微調整するプロセスです。少ない数の学習イメージを使用して、新しいタスクに学習済みの特徴を高速に転移できます。そのため、多くの場合、転移学習を使用する方が、ネットワークにゼロから学習させるよりもはるかに簡単で時間がかかりません。転移学習に事前学習済みネットワークを使用するには、新しいデータセットに一致するようにクラス数を変更しなければなりません。

SqueezeNet でディープ ネットワーク デザイナーを開きます。

deepNetworkDesigner(squeezenet)

転移学習用のネットワークを準備するために、最後の学習可能な層と最終分類層を置き換えます。SqueezeNet の最後の学習可能な層は、'conv10' という名前の 2 次元畳み込み層です。

  • 新しい [convolution2dLayer] をキャンバスにドラッグします。[FilterSize] プロパティを 1,1 に、[NumFilters] プロパティを新しいクラス数に設定します。

  • [WeightLearnRateFactor] および [BiasLearnRateFactor] の値を増やして学習率を変更し、新しい層での学習速度を転移層より速くします。

  • 最後の [convolution2dLayer] を削除し、代わりに新しい層を結合します。

    Convolution 2-D layer selected in Deep Network Designer. FilterSize is set to 1,1 and NumFilters is set to 5.

ヒント

大半の事前学習済みネットワーク (GoogLeNet など) では、最後の学習可能な層は全結合層です。転移学習用にネットワークを準備するには、全結合層を新しい全結合層に置き換え、[OutputSize] プロパティを新しいクラス数に設定します。例については、ディープ ネットワーク デザイナー入門を参照してください。

次に、分類出力層を削除します。次に、新しい [classificationLayer] をキャンバスにドラッグして代わりに結合します。出力層が既定の設定の場合、ネットワークは学習中にクラス数を学習することになります。

Classification layer selected in Deep Network Designer. OutputSize is set to auto.

[デザイナー] タブの [解析] をクリックして、ネットワークを確認してください。[深層学習ネットワーク アナライザー] によってエラー 0 が報告されていれば、ネットワークの学習の準備は整っています。新しいイメージを分類するためにネットワークに学習させる方法を示す例については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。

層のプロパティについて理解し編集するためのヘルプを表示するには、層の名前の横にあるヘルプ アイコンをクリックしてください。

[デザイナー] ペインで層を選択し、プロパティを表示して編集します。層のプロパティに関する詳細情報については、層の名前の横にあるヘルプ アイコンをクリックしてください。

Cross channel normalization layer selected in Deep Network Designer

層のプロパティの詳細については、深層学習層の一覧を参照してください。

ディープ ネットワーク デザイナーでワークスペースからネットワークに層を追加します。

ディープ ネットワーク デザイナーでは、組み込みの層を [層のライブラリ] から [デザイナー] ペインにドラッグして結合することでネットワークを構築できます。[デザイナー] ペインで、ワークスペースからネットワークにカスタム層を追加することもできます。変数 myCustomLayer にカスタム層が格納されているとします。

  1. [デザイナー] タブの [新規] をクリックします。

  2. [ワークスペースから] で一時停止し、[インポート] をクリックします。

  3. myCustomLayer を選択し、[OK] をクリックします。

  4. [追加] をクリックします。

アプリによって [デザイナー] ペインの上部にカスタム層が追加されます。新しい層を表示するには、マウスを使用してズームインするか、[ズームイン] をクリックします。

[デザイナー] ペインで [myCustomLayer] をネットワークに結合します。ディープ ネットワーク デザイナーでカスタム層を使ってネットワークを構築する方法を示す例については、ディープ ネットワーク デザイナーへのカスタム層のインポートを参照してください。

ディープ ネットワーク デザイナーでネットワークを結合することもできます。たとえば、事前学習済みのネットワークと復号化器のサブネットワークを組み合わせて、セマンティック セグメンテーション ネットワークを作成できます。

学習用のデータをディープ ネットワーク デザイナーにインポートします。

ディープ ネットワーク デザイナーの [データ] タブを使用して、学習データおよび検証データをインポートできます。ディープ ネットワーク デザイナーは、イメージ データおよびデータストア オブジェクトのインポートをサポートしています。タスクのタイプに基づいてインポート方法を選択します。

タスクデータ型データのインポート方法可視化の例
イメージ分類

ImageDatastore オブジェクト、または各クラスのイメージが格納されたサブフォルダーのあるフォルダー。クラス ラベルは、サブフォルダー名から取得されます。

[データのインポート][イメージ データのインポート] を選択します。

Import Image Data dialog box

[イメージ データのインポート] ダイアログ ボックスで、拡張オプションを選択し、検証データを指定できます。詳細については、ディープ ネットワーク デザイナーへのデータのインポートを参照してください。

Data tab of Deep Network Designer displaying a histogram of the class labels and a selection of random images from the imported data

その他の拡張ワークフロー (数値特徴入力、メモリ外のデータ、イメージ処理、オーディオ処理および音声処理など)

データストア。

その他の拡張ワークフローでは、適切なデータストア オブジェクトを使用してください。たとえば、AugmentedImageDatastoreCombinedDatastorepixelLabelImageDatastore (Computer Vision Toolbox)audioDatastore (Audio Toolbox)、またはカスタム データストアです。

関数 trainNetwork で機能する任意のデータストア オブジェクトをインポートして学習させることができます。深層学習アプリケーション用のデータストア オブジェクトの構築と使用の詳細については、深層学習用のデータストアを参照してください。

[データのインポート][データストアのインポート] を選択します。

Import Datastore dialog box

[データストアのインポート] ダイアログ ボックスで検証データを指定できます。詳細については、ディープ ネットワーク デザイナーへのデータのインポートを参照してください。

Data tab of Deep Network Designer displaying a preview of the first five observations in the datastore

ディープ ネットワーク デザイナーを使用して深層ニューラル ネットワークに学習させます。

ディープ ネットワーク デザイナーでは、関数 trainNetwork で機能するイメージ データまたは任意のデータストア オブジェクトを使用して、ネットワークに学習させることができます。たとえば、CombinedDatastore オブジェクトを使用して、セマンティック セグメンテーション ネットワークや多入力ネットワークに学習させることができます。ディープ ネットワーク デザイナーへのデータのインポートの詳細については、ディープ ネットワーク デザイナーへのデータのインポートを参照してください。

ディープ ネットワーク デザイナーにインポートしたデータでネットワークに学習させるには、[学習] タブの [学習] をクリックします。このアプリでは、学習の進行状況がアニメーション化されたプロットで表示されます。プロットには、ミニバッチの損失と精度、検証の損失と精度、および学習の進行状況に関する追加情報が表示されます。プロットの右上隅には、停止ボタン があります。そのボタンをクリックすると、学習が停止し、ネットワークの現在の状態が返されます。

Training progress plot in Deep Network Designer

詳細については、Train Networks Using Deep Network Designerを参照してください。

学習をさらに細かく制御するには、[学習オプション] をクリックして学習の設定を選択します。学習オプションを選択する方法の詳細については、trainingOptions を参照してください。

Training Options dialog box in Deep Network Designer

イメージ分類ネットワークの学習方法を示す例については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。sequence-to-sequence LSTM ネットワークの学習方法を示す例については、ディープ ネットワーク デザイナーを使用して時系列予測をネットワークに学習させるを参照してください。

ディープ ネットワーク デザイナーがサポートしていないデータでネットワークに学習させるには、[デザイナー] タブの [エクスポート] をクリックして、初期状態のネットワーク アーキテクチャをエクスポートします。次に、カスタム学習ループなどのプログラムを使用してネットワークに学習させます。

ディープ ネットワーク デザイナーで作成されたネットワーク アーキテクチャをワークスペースまたは Simulink にエクスポートし、コードを生成してネットワークと学習を再作成します。

  • 初期の重みを含むネットワーク アーキテクチャをワークスペースにエクスポートするには、[デザイナー] タブの [エクスポート] をクリックします。ネットワーク アーキテクチャに応じて、ディープ ネットワーク デザイナーはネットワークを LayerGraph lgraph または Layer オブジェクト layers としてエクスポートします。

  • ディープ ネットワーク デザイナーで学習させたネットワークをワークスペースにエクスポートするには、[学習] タブの [エクスポート] をクリックします。ディープ ネットワーク デザイナーは、学習済みのネットワーク アーキテクチャを DAGNetwork オブジェクト trainedNetwork としてエクスポートします。ディープ ネットワーク デザイナーは、学習や検証精度などの学習の結果も構造体配列 trainInfoStruct としてエクスポートします。

  • ディープ ネットワーク デザイナーで学習させたネットワークを Simulink にエクスポートするには、[学習] タブの [エクスポート][Simulink にエクスポート] をクリックします。ディープ ネットワーク デザイナーにより、学習済みネットワークが MAT ファイルとして保存され、学習済みネットワークを表す Simulink ブロックが生成されます。生成されるブロックは、学習済みネットワークのタイプによって異なります。

    • Image Classifier — 学習済み深層学習ニューラル ネットワークを使用してデータを分類します。

    • Predict — 学習済み深層学習ニューラル ネットワークを使用して応答を予測します。

    • Stateful Classify — 学習済み再帰型ニューラル ネットワークを使用してデータを分類します。

    • Stateful Predict — 学習済み再帰型ニューラル ネットワークを使用して応答を予測します。

ディープ ネットワーク デザイナーで構築および学習させるネットワークを再作成するには、MATLAB コードを生成します。

  • ネットワーク層を再作成するには、[デザイナー] タブの [エクスポート][コード生成] を選択します。

  • ネットワーク層 (任意の学習可能パラメーターを含む) を再作成するには、[デザイナー] タブの [エクスポート][初期パラメーターを使ったコード生成] を選択します。

  • ネットワーク、データのインポート、および学習を再作成するには、[学習] タブの [エクスポート][学習用コードの生成] を選択します。

スクリプトを生成した後、次のタスクを実行できます。

  • そのスクリプトを実行して、アプリで作成されたネットワーク層を再作成する。学習スクリプトを生成した場合、そのスクリプトを実行すると、ネットワークの学習も複製されます。

  • コードを調べて、プログラムで層の作成と結合を行う方法、および深層ネットワークに学習させる方法を確認する。

  • コードを編集して、層に変更を加える。スクリプトを実行してから、ネットワークをアプリにインポートし直して編集することもできます。

詳細については、ディープ ネットワーク デザイナーから MATLAB コードを生成を参照してください。

ディープ ネットワーク デザイナーを使用して、ハイパーパラメーター値の範囲のスイープ、またはベイズ最適化の使用による最適な学習オプションの検出を行う深層学習実験を作成することもできます。ディープ ネットワーク デザイナーで学習させたネットワークのハイパーパラメーターを調整するために実験マネージャーを使用する方法を示す例については、Generate Experiment Using Deep Network Designerを参照してください。

関連する例

プログラムでの使用

すべて展開する

deepNetworkDesigner は、ディープ ネットワーク デザイナー アプリを開きます。ディープ ネットワーク デザイナーが既に開いている場合、deepNetworkDesigner はアプリにフォーカスを移動します。

deepNetworkDesigner(net) は、ディープ ネットワーク デザイナー アプリを開き、指定されたネットワークをアプリに読み込みます。系列ネットワーク、DAG ネットワーク、層グラフ、または層の配列をネットワークにできます。

たとえば、事前学習済みの SqueezeNet ネットワークでディープ ネットワーク デザイナーを開きます。

net = squeezenet;
deepNetworkDesigner(net);

ディープ ネットワーク デザイナーが既に開いている場合、deepNetworkDesigner(net) はアプリにフォーカスを移動し、既存のネットワークに追加するか置き換えるかを求めます。

ヒント

複数のネットワークに学習させて結果を比較するには、実験マネージャーを使用してください。ディープ ネットワーク デザイナーを使用して、実験マネージャーに適した実験を作成できます。

バージョン履歴

R2018b で導入