このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ディープ ネットワーク デザイナーを使用したネットワークの構築
ディープ ネットワーク デザイナー アプリを使用して、深層学習ネットワークを対話形式で構築および編集します。このアプリを使用すると、ネットワークをインポートするかネットワークをゼロから構築し、層のプロパティの表示と編集、ネットワークの結合、およびコードの生成を行って、ネットワーク アーキテクチャを作成することができます。その後、ディープ ネットワーク デザイナーを使用してネットワークに学習させることや、ネットワークをエクスポートしてコマンド ラインで学習させることができます。
ディープ ネットワーク デザイナーは、さまざまなネットワーク構築タスクに使用できます。
[層のライブラリ] からブロックをドラッグして結合することによって、ネットワークを組み立てます。層をすばやく検索するには、[層のライブラリ] ペインの [層のフィルター] 検索ボックスを使用します。
You can add layers from the workspace to the network in the Designer pane.
Click New.
Pause on From Workspace and click Import.
Choose the layers or network to import and click OK.
Click Add to add the layers or network to the Designer pane.
You can also load pretrained networks by clicking New and selecting them from the start page.
層のプロパティを表示して編集するには、層を選択します。層のプロパティに関する情報については、層の名前の横にあるヘルプ アイコンをクリックしてください。
すべての層のプロパティについては、深層学習層の一覧の表の層の名前をクリックしてください。
ネットワークを構築したら、それを解析してエラーの有無をチェックすることができます。詳細については、ネットワークの確認を参照してください。
転移学習
転移学習は、深層学習アプリケーションでよく使用されています。事前学習済みのネットワークを取得して、新しいタスクの学習の開始点として使用できます。通常は、転移学習によってネットワークを微調整する方が、ランダムに初期化された重みでゼロからネットワークに学習させるよりもはるかに簡単で時間がかかりません。少ない数の学習イメージを使用して、新しいタスクに学習済みの特徴を高速に転移できます。
ディープ ネットワーク デザイナーには、イメージ データで転移学習を行うのに適したさまざまな事前学習済みのネットワークが用意されています。
事前学習済みのネットワークの読み込み
アプリを開き、事前学習済みのネットワークを選択します。[デザイナー] タブを選択し、[新規] をクリックして事前学習済みのネットワークを読み込むこともできます。ネットワークをダウンロードする必要がある場合は、そのネットワークで一時停止し、[インストール] をクリックしてアドオン エクスプローラーを開きます。
ヒント
はじめに、SqueezeNet や GoogLeNet など、高速なネットワークのいずれかを選択してみてください。どの設定が適切に機能するかを理解したら、Inception-v3 や ResNet などのより正確なネットワークを試し、結果が改善されるか確認します。事前学習済みのネットワークの選択の詳細については、事前学習済みの深層ニューラル ネットワークを参照してください。
事前学習済みのネットワークの適応
転移学習用のネットワークを準備するために、最後の学習可能な層と最終分類層を置き換えます。
最後の学習可能な層が 2 次元畳み込み層 (SqueezeNet の
'conv10'
層など) の場合は、次のようにします。新しい [convolution2dLayer] をキャンバスにドラッグします。[NumFilters] プロパティを新しいクラス数に設定し、[FilterSize] を
1,1
に設定します。[WeightLearnRateFactor] および [BiasLearnRateFactor] の値を増やして学習率を変更し、新しい層での学習速度を転移層より速くします。
最後の [convolution2dLayer] を削除し、代わりに新しい層を結合します。
最後の学習可能な層が全結合層 (大半の事前学習済みのネットワーク。GoogLeNet など) の場合は、次のようにします。
新しい [fullyConnectedLayer] をキャンバスにドラッグし、[OutputSize] プロパティを新しいクラス数に設定します。
[WeightLearnRateFactor] および [BiasLearnRateFactor] の値を増やして学習率を変更し、新しい層での学習速度を転移層より速くします。
最後の [fullyConnectedLayer] を削除し、代わりに新しい層を結合します。
次に、分類出力層を削除します。次に、新しい [classificationLayer] をキャンバスにドラッグして代わりに結合します。出力層が既定の設定の場合、ネットワークは学習中にクラス数を学習することになります。
ネットワークの学習の準備が整っていることを確認するには、[デザイナー] タブで [解析] をクリックします。
新しいイメージを分類するために事前学習済みのネットワークに再学習させる方法を示す例については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。Audio Toolbox™ がある場合は、オーディオ タスクに適した事前学習済みのネットワークを読み込むこともできます。新しいオーディオ信号のセットを分類するために事前学習済みのネットワークに再学習させる方法を示す例については、Transfer Learning with Pretrained Audio Networks in Deep Network Designerを参照してください。
事前学習済みのネットワークを使用して回帰タスク用に転移学習を行うこともできます。詳細については、分類ネットワークの回帰ネットワークへの変換を参照してください。
イメージ分類
ディープ ネットワーク デザイナーでは、層を [層のライブラリ] からドラッグして結合することで、イメージ分類ネットワークを構築できます。ネットワークをコマンド ラインで作成し、そのネットワークをディープ ネットワーク デザイナーにインポートすることもできます。
たとえば、28 x 28 のイメージから成り 10 個のクラスに分割されたデータ セットでイメージ分類用に学習させるためのネットワークを作成します。
inputSize = [28 28 1]; numClasses = 10; layers = [ imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]; deepNetworkDesigner(layers)
このネットワークを自分のデータに適合させるには、イメージの入力サイズに合わせてイメージ入力層の [InputSize] を設定し、データのクラス数に合わせて全結合層の [OutputSize] を設定します。分類タスクがより複雑な場合は、より深いネットワークを作成します。詳細については、深いネットワークを参照してください。
イメージ分類ネットワークの作成方法と学習方法を示す例については、ディープ ネットワーク デザイナーを使用したシンプルなイメージ分類ネットワークの作成を参照してください。
シーケンス分類
ディープ ネットワーク デザイナーを使用すると、シーケンス ネットワークをゼロから構築することや、スタート ページから未学習のプリビルド ネットワークを使用することができます。ディープ ネットワーク デザイナーのスタート ページを開きます。[Sequence-to-Label] で一時停止し、[開く] をクリックします。これにより、シーケンス分類の問題に適したプリビルド ネットワークが開きます。
自分のデータで学習させるために、このシーケンス ネットワークを適合させることができます。12 個の特徴と 9 個のクラスをもつデータがあるとします。このネットワークを適合させるには、[sequenceInputLayer] を選択し、[InputSize] を 12
に設定します。
次に、[fullyConnectedLayer] を選択し、[OutputSize] をクラスの数である 9
に設定します。
これでネットワークの学習準備が整いました。ディープ ネットワーク デザイナーでネットワークに学習させるには、予測子と応答を含む CombinedDatastore
を作成します。詳細については、ディープ ネットワーク デザイナーへのデータのインポートを参照してください。結合されたデータストアを作成し、ディープ ネットワーク デザイナーを使用して sequence-to-sequence 回帰ネットワークに学習させる方法を示す例については、ディープ ネットワーク デザイナーを使用して時系列予測をネットワークに学習させるを参照してください。ディープ ネットワーク デザイナーで構築されたネットワークをエクスポートしてコマンド ライン関数で学習させる方法を示す例については、ディープ ネットワーク デザイナーを使用したシンプルなシーケンス分類ネットワークの作成を参照してください。
数値データの分類
数値特徴量のデータ セット (空間次元や時間次元のない数値データの集合など) がある場合、特徴入力層を使用して深層学習ネットワークに学習させることができます。特徴入力層の詳細については、featureInputLayer
を参照してください。
ディープ ネットワーク デザイナーを使用して適切なネットワークを構築することができます。または、ネットワークをコマンド ラインで作成し、そのネットワークをディープ ネットワーク デザイナーにインポートすることもできます。
たとえば、10 個のクラスをもつ数値データのネットワークを作成します。ここで、各観測値は 20 個の特徴から構成されます。
inputSize = 20; numClasses = 10; layers = [ featureInputLayer(inputSize,'Normalization','zscore') fullyConnectedLayer(50) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]; deepNetworkDesigner(layers)
このネットワークを自分のデータに適合させるには、データに含まれる特徴の数に合わせて特徴入力層の [InputSize] を設定し、データのクラス数に合わせて全結合層の [OutputSize] を設定します。分類タスクがより複雑な場合は、より深いネットワークを作成します。詳細については、深いネットワークを参照してください。
table のデータを使用してディープ ネットワーク デザイナーでネットワークに学習させるには、データをまず適切なデータストアに変換しなければなりません。たとえば、最初に予測子と応答を含む配列に table を変換します。次に、この配列を arrayDatastore
オブジェクトに変換します。最後に、予測子と応答を含む配列データストアを CombinedDatastore
オブジェクトに結合します。これで、結合されたデータストアを使用してディープ ネットワーク デザイナーで学習を行えるようになります。詳細については、ディープ ネットワーク デザイナーへのデータのインポートを参照してください。ネットワークをワークスペースにエクスポートすることで、表形式データと関数 trainNetwork
を使用して学習させることもできます。
分類ネットワークの回帰ネットワークへの変換
ネットワークの最終層を置き換えると、分類ネットワークを回帰ネットワークに変換できます。変換は、事前学習済みの分類ネットワークを回帰タスク用に再学習させたい場合に役立ちます。
たとえば、事前学習済みの GoogLeNet ネットワークがあるとします。このネットワークを、1 つの応答をもつ回帰ネットワークに変換するには、最後の全結合層、ソフトマックス層、および分類出力層を [OutputSize] が 1 (応答の数) に設定された全結合層、および回帰層に置き換えます。
出力に複数の応答がある場合は、全結合層の [OutputSize] の値を応答の数に変更します。
多入力および多出力ネットワーク
複数の入力
ネットワークが複数のソースのデータまたは異なる形式のデータを必要とする場合、複数の入力があるネットワークを定義できます。たとえば、ネットワークによっては、複数のセンサーから異なる解像度で取得したイメージ データを必要とする場合があります。
ディープ ネットワーク デザイナーを使用すると、各層の入力と出力を制御できます。たとえば、複数のイメージ入力をもつネットワークを作成する場合、1 つのイメージ入力層から 2 つの分岐を作成します。
ディープ ネットワーク デザイナーとデータストア オブジェクトを使用すると、同じタイプの入力 (2 つの異なるソースから取得したイメージなど) を使用して多入力ネットワークに学習させることができます。イメージ データとシーケンス データのように複数の形式のデータをもつネットワークの場合、カスタム学習ループを使用してネットワークに学習させます。詳細については、カスタム学習ループ用の dlnetworkを参照してください。
複数の出力
カテゴリカル出力と数値出力の両方を必要とするタスクのように、異なる形式の複数の応答を必要とするタスク用に、複数の出力があるネットワークを定義できます。
ディープ ネットワーク デザイナーを使用すると、各層の出力を制御できます。
多出力ネットワークに学習させるには、カスタム学習ループを使用しなければなりません。カスタム学習ループでは、出力層を含まない dlnetwork
オブジェクトを使用しなければなりません。詳細については、カスタム学習ループ用の dlnetworkを参照してください。
深いネットワーク
大規模なネットワークの構築は困難な場合がありますが、ディープ ネットワーク デザイナーを使用すると、その構築を高速化できます。層のブロックは一度に操作できます。複数の層を選択して、コピー、貼り付け、または削除します。たとえば、層のブロックを使用して、畳み込み層、バッチ正規化層、および ReLU 層のグループの複数のコピーを作成できます。
学習済みネットワークの場合は、層をコピーすると、重みとバイアスもコピーされます。
このアプリを使用すると、ワークスペースからサブネットワークをコピーして簡単に接続することもできます。ネットワークまたは層をアプリにインポートするには、[新規] 、 [ワークスペースからインポート] をクリックします。[追加] をクリックして、その層を現在のネットワークに追加します。
深層学習の高度な応用
ディープ ネットワーク デザイナーを使用して、コンピューター ビジョンやイメージ処理タスクといった高度な応用のためにネットワークの構築と学習を行うことができます。
セマンティック セグメンテーション ネットワークの作成
セマンティック セグメンテーションは、イメージの各ピクセルをクラス ラベルに関連付けるプロセスを表します。セマンティック セグメンテーションの応用例としては、自動運転のための道路セグメンテーションや医療診断のための癌細胞セグメンテーションなどがあります。
[層のライブラリ] から [デザイナー] ペインに層をドラッグして、セマンティック セグメンテーション ネットワークを作成します。または、ネットワークをコマンド ラインで作成し、そのネットワークをディープ ネットワーク デザイナーにインポートします。
たとえば、ダウンサンプリングおよびアップサンプリングの設計に基づいてシンプルなセマンティック セグメンテーション ネットワークを作成します。
inputSize = [32 32 1]; layers = [ imageInputLayer(inputSize) convolution2dLayer([3,3],64,'Padding',[1,1,1,1]) reluLayer maxPooling2dLayer([2,2],'Stride',[2,2]) convolution2dLayer([3,3],64,'Padding',[1,1,1,1]) reluLayer transposedConv2dLayer([4,4],64,'Stride',[2,2],'Cropping',[1,1,1,1]) convolution2dLayer([1,1],2) softmaxLayer pixelClassificationLayer ]; deepNetworkDesigner(layers)
セマンティック セグメンテーション ネットワークの構築と学習の詳細については、ディープ ネットワーク デザイナーでの簡単なセマンティック セグメンテーション ネットワークの学習 (Computer Vision Toolbox)を参照してください。
image-to-image 回帰ネットワークの作成
image-to-image 回帰では、入力イメージを受け取って出力イメージを生成しますが、多くの場合、同じサイズの出力イメージを生成します。このタイプのネットワークは、超解像処理、カラーライゼーション、またはイメージのブレ除去に役立ちます。
ディープ ネットワーク デザイナーを使用して、image-to-image 回帰ネットワークを作成できます。たとえば、Computer Vision Toolbox™ から関数 unetLayers
を使用して、image-to-image 回帰に適した単純なネットワーク アーキテクチャを作成します。この関数は、image-to-image 回帰に簡単に適合できる、セマンティック セグメンテーションに適したネットワークを提供します。
入力サイズが 28 x 28 x 1 ピクセルのネットワークを作成します。
layers = unetLayers([28,28,1],2,'encoderDepth',2);
deepNetworkDesigner(layers);
[デザイナー] ペインから、ソフトマックス層とピクセル分類層を [層のライブラリ] にある回帰層に置き換えます。
最終畳み込み層を選択し、[NumFilters] プロパティを 1
に設定します。
image-to-image 回帰ネットワークの構築と学習の詳細については、ディープ ネットワーク デザイナーでの image-to-image 回帰を参照してください。
カスタム学習ループ用の dlnetwork
ディープ ネットワーク デザイナーを使用して、dlnetwork
オブジェクトの構築と解析を行うことができます。dlnetwork
オブジェクトを使用すると、自動微分を使用するカスタム学習ループをサポートできます。タスクに必要な学習オプションが組み込みの学習オプションとして用意されていない場合、カスタム学習ループを使用します。
ネットワークがカスタム学習ループによる学習に対応しているかどうかを確認するには、[解析] 、 [dlnetwork についての解析] をクリックします。詳細については、ネットワークの確認を参照してください。
ディープ ネットワーク デザイナーでは、カスタム学習ループによる学習はサポートされていません。カスタム学習ループを使用してネットワークに学習させるには、まずネットワークをワークスペースにエクスポートし、dlnetwork
オブジェクトに変換します。その後、dlnetwork
オブジェクトとカスタム学習ループを使用してネットワークに学習させることができます。詳細については、カスタム学習ループを使用したネットワークの学習を参照してください。
ネットワークの確認
ネットワークを確認して層の詳細を調べるには、[デザイナー] タブの [解析] をクリックします。問題を調査して層のプロパティを調べ、ネットワークでのサイズの不一致を解決します。ディープ ネットワーク デザイナーに戻って層を編集し、[解析] を再度クリックして結果を確認します。深層学習ネットワーク アナライザーによってエラー 0 が報告されている場合、編集したネットワークの学習の準備が整っています。
カスタム学習ワークフローに関してネットワークを解析することもできます。[解析] 、 [dlnetwork についての解析] をクリックし、ネットワークにおける dlnetwork
オブジェクトの使用状況を解析します。たとえば、ネットワーク アナライザーは、層グラフが出力層をもたないことをチェックします。