ディープ ネットワーク デザイナー入門
この例では、ディープ ネットワーク デザイナーを使用して事前学習済みの GoogLeNet ネットワークを適応させ、新しいイメージ コレクションを分類する方法を説明します。このプロセスは転移学習と呼ばれ、通常、新しいネットワークに学習させるよりもはるかに簡単で時間がかかりません。これは、少ない数の学習イメージを使用して、新しいタスクに学習済みの特徴を適用できるためです。転移学習用のネットワークを対話形式で準備するには、ディープ ネットワーク デザイナーを使用します。
学習用のデータの解凍
ワークスペースでデータを解凍します。
unzip('MerchData.zip');
事前学習済みのネットワークの選択
ディープ ネットワーク デザイナーを開きます。
deepNetworkDesigner
ディープ ネットワーク デザイナーのスタート ページで、事前学習済みの GoogLeNet ネットワークを選択して読み込みます。ネットワークをダウンロードする必要がある場合は、[インストール] をクリックしてアドオン エクスプローラーを開きます。
ディープ ネットワーク デザイナーにネットワーク全体が縮小表示されます。ネットワークのプロットを確認します。マウスでズームインするには、Ctrl キーを押しながらスクロール ホイールを使用します。
データセットの読み込み
ディープ ネットワーク デザイナーにデータを読み込むには、[データ] タブで、[データのインポート]、[イメージ分類データのインポート] をクリックします。
[データ ソース] リストの [フォルダー] を選択します。[参照] をクリックし、解凍した MerchData フォルダーを選択します。
ダイアログ ボックスでは、アプリ内から検証データを分割することもできます。データを 70% の学習データと 30% の検証データに分割します。
学習イメージに対して実行する拡張演算を指定します。この例では、X 軸方向のランダムな反転、[-90,90] 度の範囲のランダムな回転、[1,2] の範囲のランダムな再スケーリングを実行します。
[インポート] をクリックして、ディープ ネットワーク デザイナーにデータをインポートします。
ディープ ネットワーク デザイナーを使用すると、[データ] タブにある学習データと検証データの分布を視覚的に検査できます。この例では、データセットにクラスが 5 つあることが確認できます。各クラスからのランダムな観測値を表示することもできます。
イメージ サイズは学習の間、ネットワークの入力サイズに合うようにディープ ネットワーク デザイナーにより変更されます。ネットワーク入力サイズを表示するには、[デザイナー] タブで imageInputLayer
をクリックします。このネットワークの入力サイズは 224 x 224 です。
転移学習用のネットワークの編集
新しいイメージを分類するように事前学習済みのネットワークに再学習させるには、最後の学習可能な層と最終分類層を、新しいデータ セットに適応させた新しい層に置き換えます。GoogLeNet では、これらの層の名前はそれぞれ 'loss3-classifier'
と 'output'
です。
[デザイナー] タブで、新しい fullyConnectedLayer
を [層のライブラリ] からキャンバスにドラッグします。OutputSize
を新しいデータのクラス数 (この例では 5
) に設定します。
学習率を編集して、新しい層での学習速度を転移層より速くします。WeightLearnRateFactor
および BiasLearnRateFactor
を 10
に設定します。最後の全結合層を削除し、代わりに新しい層を結合します。
出力層を置き換えます。[層のライブラリ] の最後までスクロールして、新しい classificationLayer
をキャンバスにドラッグします。元の output
層を削除して、代わりに新しい層を結合します。
ネットワークの確認
[解析] をクリックしてネットワークを確認します。深層学習ネットワーク アナライザーによってエラー 0 が報告されていれば、ネットワークの学習の準備は整っています。
ネットワークの学習
既定の設定でネットワークに学習させるには、[学習] タブの [学習] をクリックします。
学習をさらに細かく制御するには、[学習オプション] をクリックして学習の設定を選択します。既定の学習オプションは大きなデータ セットに適しています。小さなデータ セットの場合は、ミニバッチのサイズおよび検証頻度の値を小さくします。学習オプションの詳細については、trainingOptions
を参照してください。
この例では、[InitialLearnRate] を 0.0001
、[MaxEpochs] を 8
、[ValidationFrequency] を 5
に設定します。観測値が 55 個あるため、MiniBatchSize を 11
に設定して学習データを均等に分け、それぞれのエポックで必ず学習セット全体が使用されるようにします。
指定した学習オプションでネットワークに学習させるには、[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) + "%");
その他の事前学習済みネットワークを含む詳細についてはディープ ネットワーク デザイナーを参照してください。