主要内容

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

分類ネットワークの回帰ネットワークへの変換

この例では,学習済み分類ネットワークを回帰ネットワークに変換する方法を説明します。

事前学習済みのイメージ分類ネットワークは,100多万枚を超えるイメージで学習しており,イメージを1000個のオブジェクトカテゴリ(キーボード,マグカップ,鉛筆,多くの動物など)に分類できます。このネットワークは広範囲にわたるイメージについての豊富な特徴表現を学習しています。このネットワークは入力としてイメージを取り,イメージ内のオブジェクトのラベルを各オブジェクトカテゴリの確率と共に出力します。

転移学習は,深層学習アプリケーションでよく使用されています。事前学習済みのネットワークを取得して,新しいタスクの学習の開始点として使用できます。この例では,事前学習済みの分類ネットワークを利用して,回帰タスク用に再学習させる方法を説明します。

この例では,分類用の事前学習済みの畳み込みニューラルネットワークアーキテクチャを読み込み,分類用の層を置き換え,ネットワークに再学習させて手書きの数字の回転角度を予測します。オプションで,imrotate(图像处理工具箱™)を使用して,予測値に基づいてイメージの回転を補正できます。

事前学習済みのネットワークの読み込み

サポートファイルdigitsNet.matから事前学習済みのネットワークを読み込みます。このファイルには,手書きの数字を分類する分類ネットワークが含まれています。

负载digitsNet层=净。层
图层数组:1“imageinput”图像输入28××28日1图像“zerocenter”正常化2 conv_1的卷积8 3×3×1的隆起与步幅[1]和填充“相同”3“batchnorm_1”批量标准化批量标准化8通道4的relu_1 ReLU ReLU 5“maxpool_1”马克斯池2×2马克斯池步(2 - 2)和填充[0 0 0 0]6“conv_2”卷积16 3×3×8旋转步[1]和填充“相同”7”batchnorm_2批量标准化批量标准化与16通道8 ' relu_2 ReLU ReLU 9“maxpool_2”马克斯池2×2马克斯池步(2 - 2)和填充[0 0 0 0]10 conv_3的卷积32 3×3×16步[1]和填充的卷积‘相同’11“batchnorm_3”Batch normalizing Batch Normalization with 32 channels 12 'relu_3' ReLU ReLU 13 'fc' Fully Connected 10 Fully Connected layer 14 'softmax' softmax softmax 15 'classoutput' classoutput crossentropyex with '0'和9个其他类

データの読み込み

データセットには,手書きの数字の合成イメージと各イメージに対応する回転角度(度単位)が含まれています。

digitTrain4DArrayDatadigitTest4DArrayDataを使用して学習イメージと検証イメージを4次元配列として読み込みます。出力YTrainおよびYValidationは回転角度(度単位)です。学習データセットと検証データセットにはそれぞれ,5000枚のイメージが含まれています。

[XTrain ~, YTrain] = digitTrain4DArrayData;[XValidation ~, YValidation] = digitTest4DArrayData;

imshowを使用して,ランダムに選ばれた20枚の学習イメージを表示します。

numTrainImages =元素个数(YTrain);图idx = randperm(numTrainImages,20);i = 1:元素个数(idx)次要情节(4、5、i) imshow (XTrain (:,:,:, idx(我)))结束

最後の層の置き換え

ネットワークの畳み込み層は,入力イメージを分類するために,最後の学習可能な層と最終分類層が使用するイメージの特徴を抽出します。digitsNetのこれらの2つの層“俱乐部”および“classoutput”は,ネットワークによって抽出された特徴を組み合わせてクラス確率,損失値,および予測ラベルにまとめる方法に関する情報を含んでいます。回帰用に事前学習済みのネットワークに再学習させるには,これら2つの層をこのタスクに適応させた新しい層に置き換えます。

最後の全結合層,ソフトマックス層,および分類出力層をサイズ1(応答の数)の全結合層と回帰層に置き換えます。

numResponses = 1;layers = [layers(1:12) fulllyconnectedlayer (numResponses) regressionLayer];

初期の層の凍結

これで,新しいデータでネットワークに再学習させる準備が整いました。オプションで,ネットワークの初期の層について学習率を 0 に設定すると、それらの層の重みを "凍結" できます。学習中にtrainNetworkは凍結された層のパラメーターを更新しません。凍結された層の勾配は計算する必要がないため,多数の初期の層について重みを凍結すると,ネットワーク学習を大幅に高速化できます。新しいデータセットが小さい場合,初期のネットワーク層を凍結すると,新しいデータセットに対するこれらの層の過適合を防止することもできます。

サポート関数freezeWeightsを使用して,最初の12個の層について学習率を0に設定します。

层(1:12)= freezeWeights(层(1:12));

ネットワークの学習

ネットワーク学習オプションを作成します。初期学習率0.001をに設定します。検証データを指定して,学習中にネットワークの精度を監視します。学習の進行状況プロットをオンにして,コマンドウィンドウの出力をオフにします。

选择= trainingOptions (“个”...“InitialLearnRate”, 0.001,...“ValidationData”{XValidation, YValidation},...“阴谋”“训练进步”...“详细”、假);

trainNetworkを使用してネットワークを作成します。このコマンドでは,互換性のあるGPUが利用できる場合は,そのGPUが使用されます。GPUを使用するには,并行计算工具箱™とサポートされているGPUデバイスが必要です。サポートされているデバイスについては,リリース別のGPUサポート(并行计算工具箱)を参照してください。そうでない場合,trainNetworkではCPUが使用されます。

网= trainNetwork (XTrain、YTrain层,选择);

ネットワークのテスト

検証データに対する精度を評価することによって,ネットワーク性能をテストします。

预测を使用して,検証イメージの回転角度を予測します。

YPred =预测(净,XValidation);

次の計算を行って,モデルの性能を評価します。

  1. 許容誤差限界内にある予測の比率

  2. 回転角度の予測値と実際の値の平方根平均二乗誤差(RMSE)

回転角度の予測値と実際の値との間の予測誤差を計算します。

predictionError = YValidation - YPred;

真の角度から許容誤差限界内にある予測の数を計算します。しきい値を10度に設定します。このしきい値の範囲内にある予測の比率を計算します。

用力推= 10;numCorrect = sum(abs(predictionError) < thr);numImagesValidation =元素个数(YValidation);= numCorrect / numImagesValidation准确性
精度= 0.7532

平方根平均二乗誤差(RMSE)を使用して,回転角度の予測値と実際の値の差を測定します。

rmse =√意味着(predictionError ^ 2))
rmse =9.0270

数字の回転補正

图像处理工具箱の関数を使用して,数字をまっすぐにし,まとめて表示できます。imrotate(图像处理工具箱)を使用して,49個の数字標本をそれぞれの予測回転角度に応じて回転させます。

idx = randperm (numImagesValidation, 49);i = 1:numel(idx) i = XValidation(:,:,:,idx(i));Y = YPred (idx (i));XValidationCorrected (::,:, i) = imrotate (Y,我“双三次的”“作物”);结束

元の数字と回転補正後の数字を表示します。蒙太奇(图像处理工具箱)を使用して,数字を1つのイメージにまとめます。

figure subplot(1,2,1) montage(XValidation(:,:,:,idx)) title(“原始”)子情节(1,2,2)蒙太奇(XValidationCorrected)标题(“纠正”

参考

|

関連するトピック