Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

この例では、ディープ ネットワーク デザイナーを使用して事前学習済みの GoogLeNet ネットワークを適応させ、新しいイメージ コレクションを分類する方法を説明します。このプロセスは転移学習と呼ばれ、通常、新しいネットワークに学習させるよりもはるかに簡単で時間がかかりません。これは、少ない数の学習イメージを使用して、新しいタスクに学習済みの特徴を適用できるためです。転移学習用のネットワークを対話形式で準備するには、ディープ ネットワーク デザイナーを使用します。

学習用のデータの解凍

ワークスペースでデータを解凍します。

unzip('MerchData.zip');

事前学習済みのネットワークの選択

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

deepNetworkDesigner

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

ディープ ネットワーク デザイナーにネットワーク全体が縮小表示されます。ネットワークのプロットを確認します。マウスでズームインするには、Ctrl キーを押しながらスクロール ホイールを使用します。

データセットの読み込み

ディープ ネットワーク デザイナーにデータを読み込むには、[データ] タブで、[データのインポート][イメージ分類データのインポート] をクリックします。

[データ ソース] リストの [フォルダー] を選択します。[参照] をクリックし、解凍した MerchData フォルダーを選択します。

ダイアログ ボックスでは、アプリ内から検証データを分割することもできます。データを 70% の学習データと 30% の検証データに分割します。

学習イメージに対して実行する拡張演算を指定します。この例では、X 軸方向のランダムな反転、[-90,90] 度の範囲のランダムな回転、[1,2] の範囲のランダムな再スケーリングを実行します。

[インポート] をクリックして、ディープ ネットワーク デザイナーにデータをインポートします。

ディープ ネットワーク デザイナーを使用すると、[データ] タブにある学習データと検証データの分布を視覚的に検査できます。この例では、データセットにクラスが 5 つあることが確認できます。各クラスからのランダムな観測値を表示することもできます。

イメージ サイズは学習の間、ネットワークの入力サイズに合うようにディープ ネットワーク デザイナーにより変更されます。ネットワーク入力サイズを表示するには、[デザイナー] タブで imageInputLayer をクリックします。このネットワークの入力サイズは 224 x 224 です。

転移学習用のネットワークの編集

新しいイメージを分類するように事前学習済みのネットワークに再学習させるには、最後の学習可能な層と最終分類層を新しいデータ セットに適応させます。GoogLeNet では、これらの層の名前はそれぞれ 'loss3-classifier''output' です。

[デザイナー] タブで最後の全結合層 'loss3-classifier' をクリックします。[プロパティ] ペインの下部で、[層のロックを解除] をクリックします。表示される警告ダイアログで、[ロックの強制解除] をクリックします。これにより層のプロパティのロックが解除され、それらを新しいタスクに適応できるようになります。

R2023b より前: 層のプロパティを編集するには、層のロックを解除するのではなく、層を置き換えなければなりません。

OutputSize を新しいデータのクラス数 (この例では 5) に設定します。

学習率を編集して、新しい層での学習速度を転移層より速くします。WeightLearnRateFactor および BiasLearnRateFactor10 に設定します。

分類層 'output' を選択し、[層のロックを解除] をクリックしてから、[ロックの強制解除] をクリックします。ロックが解除された出力層に対して OutputSize を設定する必要はありません。学習時に、ディープ ネットワーク デザイナーによって層の出力クラスがデータから自動的に設定されます。

ネットワークの確認

[解析] をクリックしてネットワークを確認します。深層学習ネットワーク アナライザーによってエラー 0 が報告されていれば、ネットワークの学習の準備は整っています。

ネットワークの学習

既定の設定でネットワークに学習させるには、[学習] タブの [学習] をクリックします。

学習をさらに細かく制御するには、[学習オプション] をクリックして学習の設定を選択します。既定の学習オプションは大きなデータ セットに適しています。小さなデータ セットの場合は、ミニバッチのサイズおよび検証頻度の値を小さくします。学習オプションの詳細については、trainingOptionsを参照してください。

この例では、[InitialLearnRate]0.0001[MaxEpochs]8[ValidationFrequency]5 に設定します。観測値が 55 個あるため、MiniBatchSize11 に設定して学習データを均等に分け、それぞれのエポックで必ず学習セット全体が使用されるようにします。

指定した学習オプションでネットワークに学習させるには、[OK] をクリックしてから [学習] をクリックします。

ディープ ネットワーク デザイナーでは、学習の進行状況の可視化と監視が行えます。必要に応じて、学習オプションを編集してネットワークを再学習させることができます。

学習結果のエクスポート

学習結果をエクスポートするには、[学習] タブで [エクスポート][学習済みネットワークと結果のエクスポート] を選択します。ディープ ネットワーク デザイナーによって、学習済みネットワークが変数 trainedNetwork_1 に、学習情報が変数 trainInfoStruct_1 にエクスポートされます。

使用するネットワークと学習オプションを再作成する MATLAB コードを生成することもできます。[学習] タブの [エクスポート][学習用コードの生成] を選択します。

学習済みネットワークのテスト

学習済みネットワークを使用して分類する新しいイメージを選択します。

I = imread("MerchDataTest.jpg");

ネットワークの入力サイズに合うようにテスト イメージをサイズ変更します。

I = imresize(I, [224 224]);

学習済みネットワークを使用してテスト イメージを分類します。

[YPred,probs] = classify(trainedNetwork_1,I);
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");

その他の事前学習済みネットワークを含む詳細についてはディープ ネットワーク デザイナーを参照してください。

参考

関連するトピック