Main Content

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

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

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

説明

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

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

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

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

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

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

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

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

  • ネットワークの構築と学習を行う MATLAB® コードを生成する。

Deep Network Designer app

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

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

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

すべて展開する

ディープ ネットワーク デザイナーでシンプルな事前学習済みのイメージ分類ネットワークを確認します。

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

ヒント

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

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

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

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

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

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

deepNetworkDesigner(squeezenet)

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

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

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

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

ヒント

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

データストア。

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

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

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

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

ディープ ネットワーク デザイナーにインポートしたデータでネットワークに学習させるには、[学習] タブの [学習] をクリックします。学習をさらに細かく制御するには、[学習オプション] をクリックして学習の設定を選択します。学習オプションを選択する方法の詳細については、trainingOptions を参照してください。イメージ分類ネットワークの学習方法を示す例については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。

ディープ ネットワーク デザイナーで作成されたネットワーク アーキテクチャを作成してワークスペースにエクスポートします。

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

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

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

ネットワーク層を再作成するには、[デザイナー] タブの [エクスポート][コード生成] を選択します。または、[エクスポート][初期パラメーターを使ったコード生成] を選択して、学習可能なパラメーターを含むネットワークを再作成できます。スクリプトを生成した後、次のタスクを実行できます。

  • そのスクリプトを実行して、アプリで作成されたネットワーク層を再作成する。

  • ネットワークに学習させるために、スクリプトを実行し、層を関数 trainNetwork に指定する。

  • コードを調べて、プログラムで層を作成および結合する方法を確認する。

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

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

  • スクリプトを実行して、アプリで実行するネットワーク層と学習を再作成する。

  • コードを調べて、プログラムによってデータをインポートする方法を確認し、ネットワークを構築して学習させる。

  • コードを変更して、さまざまなネットワーク アーキテクチャと学習オプションを試し、結果にどのように影響するか確認する。

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

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

関連する例

プログラムによる使用

すべて展開する

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

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

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

net = squeezenet;
deepNetworkDesigner(net);

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

ヒント

複数のネットワークに学習させて結果を比較するには、実験マネージャーを使用してください。

R2018b で導入