主要内容

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

ディープネットワークデザイナーを使用した転移学習

この例では,ディープネットワークデザイナーアプリを使用して転移学習をインタラクティブに実行する方法を説明します。

転移学習は,事前学習済みの深層学習ネットワークを利用して,新しいタスクを学習するように微調整するプロセスです。通常は,転移学習を使用する方が,ネットワークにゼロから学習させるよりも簡単で時間もかかりません。少量のデータを使用して,新しいタスクに学習済みの特徴を高速に転移できます。

ディープネットワークデザイナーでイメージ分類のための転移学習を実行するには,次の手順に従います。

  1. ディープネットワークデザイナーアプリを開いて事前学習済みのネットワークを選択します。

  2. 新しいデータセットをインポートします。

  3. 最後の層を,新しいデータセットに適応させた新しい層に置き換えます。

  4. 学習率を設定して,新しい層での学習速度を転移層より速くします。

  5. ディープネットワークデザイナーを使用してネットワークに学習させるか,ネットワークをエクスポートしてコマンドラインで学習させます。

データの解凍

ワークスペースで,MathWorks营销データセットを解凍します。75年これは個のMathWorksの商品イメージから成る小さなデータセットであり,5つの異なるクラス(“帽”,“立方体”,“打牌”,“螺丝刀”,“火炬”)に属します。

解压缩(“MerchData.zip”);

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

ディープネットワークデザイナーを開くには,[アプリ]タブの[機械学習および深層学習]でアプリのアイコンをクリックします。あるいは,コマンドラインからアプリを開くこともできます。

deepNetworkDesigner

ディープネットワークデザイナーには,広範囲のイメージに適した豊富な特徴表現を学習している,さまざまな事前学習済みのイメージ分類ネットワークが用意されています。転移学習は,使用するイメージが,ネットワークの学習時にもともと使用されたイメージに類似している場合に特に効果を発揮します。使用する学習イメージがImageNetデータベースに含まれるような自然イメージの場合,どの事前学習済みネットワークも適しています。使用可能なネットワークの一覧,およびネットワークを比較する方法については,事前学習済みの深層ニューラルネットワークを参照してください。

使用するデータがImageNetのデータと大きく異なる場合(たとえば,非常に小さいイメージ,スペクトログラム,またはイメージ以外のデータを使用する場合)は,新しいネットワークに学習させる方が良いこともあります。ネットワークにゼロから学習させる方法を示す例については,ディープネットワークデザイナーを使用したシンプルなシーケンス分類ネットワークの作成およびディープネットワークデザイナーでの簡単なセマンティックセグメンテーションネットワークの作成を参照してください。

SqueezeNetでは追加のサポートパッケージが必要ありません。その他の事前学習済みネットワークでは,必要なサポートパッケージがインストールされていない場合,[インストール]オプションがアプリに表示されます。

事前学習済みネットワークの一覧から(SqueezeNet)を選択し,[開く]をクリックします。

ネットワークの調査

ディープネットワークデザイナーの[デザイナー]ペインにネットワーク全体が縮小表示されます。

ネットワークのプロットを確認します。マウスでズームインするには,Ctrlキーを押しながらスクロールホイールを使用します。移動するには,方向キーを使用するか,スクロールホイールを押したままでマウスをドラッグします。プロパティを表示する層を選択します。すべての層の選択を解除すると,[プロパティ]ペインにネットワークの概要が表示されます。

データのインポート

ディープネットワークデザイナーにデータを読み込むには,[データ]タブで,[データのインポート][イメージデータのインポート]をクリックします。[イメージデータのインポート]ダイアログボックスが開きます。

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

イメージ拡張

学習データにイメージ拡張を適用するよう選択することが可能です。ディープネットワークデザイナーアプリには以下の拡張オプションが用意されています。

  • X軸方向のランダムな反転

  • Y軸方向のランダムな反転

  • ランダムな回転

  • ランダムな再スケーリング

  • ランダムな水平方向の平行移動

  • ランダムな垂直方向の平行移動

ランダム化された”拡張”をデータに適用して,実質的に学習データの量を増やすことができます。拡張では,イメージデータの歪みに対して不変になるようにネットワークに学習させることもできます。たとえば,入力イメージに存在する回転に対してネットワークが不変になるように,入力イメージにランダムな回転を追加できます。

この例ではX軸方向のランダムな反転,(-90、90)度の範囲のランダムな回転,[1,2]の範囲のランダムな再スケーリングを実行します。

検証データ

検証データを学習データから分割してインポートするか,それとも他のソースからインポートするかを選択することも可能です。検証では,学習データと比較して新しいデータのモデルパフォーマンスが推定され,パフォーマンスの監視や過適合の防止に役立ちます。

この例では,イメージの30%を検証に使用します。

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

データの可視化

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

学習用のネットワークの準備

[デザイナー]ペインのネットワークを編集して,データの新しいクラス数を指定します。転移学習用のネットワークを準備するために,最後の学習可能な層と最終分類層を置き換えます。

最後の学習可能な層の置き換え

転移学習に事前学習済みネットワークを使用するには,新しいデータセットに一致するようにクラス数を変更しなければなりません。まず,ネットワークの最後の学習可能な層を見つけます。SqueezeNetの最後の学習可能な層は,最後の畳み込み層“conv10”です。この場合は,その畳み込み層を,クラスの数と同じ数のフィルターを持つ新しい畳み込み層に置き換えます。

新しいconvolution2dLayerをキャンバスにドラッグします。元の畳み込み層と一致させるために,FilterSize1,1に設定します。

NumFiltersプロパティは,分類問題のクラス数を定義します。NumFiltersを新しいデータのクラス数(この例では5)に変更します。

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

最後の2次元畳み込み層を削除して,代わりに新しい層を結合します。

出力層の置き換え

転移学習用に,出力層を置き換える必要があります。[層のライブラリ]の最後までスクロールして,新しいclassificationLayerをキャンバスにドラッグします。元の分類層を削除して,その位置に新しい層を結合します。

新しい出力層には,OutputSizeを設定する必要はありません。学習時に,ディープネットワークデザイナーによって層の出力クラスがデータから自動的に設定されます。

ネットワークの確認

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

ネットワークの学習

ディープネットワークデザイナーでは,アプリにインポートした,あるいはアプリで作成したネットワークに学習させることが可能です。

既定の設定でネットワークに学習させるには,[学習]タブの[学習]をクリックします。既定の学習オプションは大きなデータセットに適しています。小さなデータセットの場合は,ミニバッチサイズを小さくし,検証頻度を減らします。

学習をさらに細かく制御するには,(学習オプション]をクリックして学習の設定を選択します。

  • 初期学習率を小さい値に設定して,転移層での学習速度を下げます。

  • 各エポックで1回,検証データに対する精度が計算されるように,検証頻度を指定します。

  • 小さい数のエポックを指定します。エポックとは,学習データセット全体の完全な学習サイクルのことです。転移学習の場合,同じエポック数の学習を行う必要はありません。

  • ミニバッチのサイズ,つまり各反復で使用するイメージの数を指定します。それぞれのエポックで必ずデータセット全体が使用されるように,学習サンプルの数を均等に分割するようミニバッチのサイズを設定します。

この例では,InitialLearnRate0.0001に,ValidationFrequency5に,MaxEpochs8に設定します。観測値が55個あるため,MiniBatchSize11に設定して学習データを均等に分け,各エポックで必ず学習データセット全体が使用されるようにします。学習オプションの詳細については,trainingOptionsを参照してください。

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

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

結果のエクスポートとMATLABコードの生成

学習した重みを含むネットワークアーキテクチャをエクスポートするには,[学習]タブの[エクスポート](学習済みネットワークと結果のエクスポート]を選択します。ディープネットワークデザイナーによって,学習済みネットワークが変数trainedNetwork_1に,学習情報が変数trainInfoStruct_1にエクスポートされます。

trainInfoStruct_1
trainInfoStruct_1 =结构体字段:TrainingLoss:[1×40双]TrainingAccuracy:[1×40双]ValidationLoss:[4.3374 1.3966 2.4329南南南南南南南南南南南南南南南0.7526 0.6424 0.5940 0.6349南南南南南南南南南南南南南南南南0.5490 0.5179]ValidationAccuracy:[10 15南南南南南南南南南南南70 90 85年南南南南南南南南南南南南85 90年南南南南南南南南95]BaseLearnRate:[1×40双]FinalValidationLoss: 0.5179 FinalValidationAccuracy: 95

使用するネットワークと学習オプションを再作成するMATLABコードを生成することもできます。[学習]タブの[エクスポート](学習用コードの生成)を選択します。MATLABコードを確認して、学習用のデータの準備、ネットワーク アーキテクチャの作成、およびネットワークの学習をプログラムによって行う方法を学びます。

新しいイメージの分類

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

我= imread (“MerchDataTest.jpg”);

イメージサイズは学習の間,ネットワークの入力サイズに合うようにディープネットワークデザイナーにより変更されます。ネットワークの入力サイズを確認するには,[デザイナー]ペインに移動してimageInputLayer(最初の層)を選択します。このネットワークの入力サイズは227 x 227です。

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

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

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

(YPred,聚合氯化铝)= (trainedNetwork_1, I)进行分类;imshow(I) label = YPred;标题(string(标签)+”、“+ num2str(100 *马克斯(聚合氯化铝),3)+“%”);

参考

関連するトピック