主要内容

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

事前学習済みのネットワ,クを使用した転移学習

この例では,事前学習済みのGoogLeNet畳み込みニューラルネットワークを微調整して,新しいイメージコレクションの分類を実行する方法を説明します。

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

転移学習は,深層学習アプリケ,ションでよく使用されています。事前学習済みのネットワ,クを取得して、新しいタスクの学習の開始点として使用できます。通常は、転移学習によってネットワークを微調整する方が、ランダムに初期化された重みでゼロからネットワークに学習させるよりもはるかに簡単で時間がかかりません。少ない数の学習イメージを使用して、新しいタスクに学習済みの特徴を高速に転移できます。

デ,タの読み込み

新しい▪▪メ▪ジを解凍して▪▪メ▪ジデ▪タストアとして読み込みます。imageDatastoreは、フォルダ、名に基づいて、メ、ジに自動的にラベルを付け、デ、タをImageDatastoreオブジェクトとして格納します。イメージデータストアを使用すると,メモリに収まらないデータなどの大きなイメージデータを格納し,畳み込みニューラルネットワークの学習中にイメージをバッチ単位で効率的に読み取ることができます。

解压缩(“MerchData.zip”);imds = imageDatastore(“MerchData”...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

デ,タを学習デ,タセットと検証デ,タセットに分割します。メジの70%を学習に使用し,30%を検証に使用します。splitEachLabel

[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,“随机”);

このとき,この非常に小さなデータセットには,55個の学習イメージと20個の検証イメージが格納されています。いくかのサンプルメジを表示します。

numTrainImages = numel(imdsTrain.Labels);idx = randperm(numTrainImages,16);数字i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

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

事前学習済みのGoogLeNetニュ,ラルネットワ,クを読み込みます。深度学习工具箱™模型为GoogLeNet网络がンストルされていない場合,ダウンロド用リンクが表示されます。

Net = googlenet;

deepNetworkDesignerを使用して,ネットワークアーキテクチャを対話的に可視化し,ネットワーク層についての詳細情報を表示します。

deepNetworkDesigner(净)

最初の層であるジ入力層には,サ224 × 224 × 3の入力ジが必要です。ここで,3はカラ,チャネルの数です。

inputSize = net.Layers(1).InputSize
inputSize =1×3224 224 3

最後の層の置き換え

事前学習済みのネットワ,クの全結合層および分類層は,1000個のクラスに対して構成されています。GoogLeNetのこれらの2の層loss3-classifierおよび输出は,ネットワークによって抽出された特徴を組み合わせてクラス確率,損失値,および予測ラベルにまとめる方法に関する情報を含んでいます。新しいイメージを分類するために事前学習済みのネットワークを再学習させるには,これら2つの層を新しいデータセットに適応させた新しい層に置き換えます。

学習済みのネットワ,クから層グラフを抽出します。

lgraph = layerGraph(net);

全結合層を,クラスの数と同じ数の出力をも新しい全結合層に置き換えます。新しい層での学習速度を転移層より速くするには,全結合層のWeightLearnRateFactorおよびBiasLearnRateFactorの値を大きくします。

numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5
newLearnableLayer = fullyConnectedLayer(numClasses,...“名字”“new_fc”...“WeightLearnRateFactor”10...“BiasLearnRateFactor”10);lgraph =替换层(lgraph,“loss3-classifier”, newLearnableLayer);

分類層はネットワ,クの出力クラスを指定します。分類層をクラスラベルがない新しい分類層に置き換えます。trainNetworkは,学習時に層の出力クラスを自動的に設定します。

newClassLayer = classificationLayer(“名字”“new_classoutput”);lgraph =替换层(lgraph,“输出”, newClassLayer);

ネットワ,クの学習

ネットワークにはサイズが224 x 224 x 3の入力イメージが必要ですが,イメージデータストアにあるイメージのサイズは異なります。拡張▪▪メ▪▪ジデ▪タストアを使用して学習▪▪メ▪ジのサ▪ズを自動的に変更します。学習イメージに対して実行する追加の拡張演算として,学習イメージを縦軸に沿ってランダムに反転させる演算や,水平方向および垂直方向に最大30ピクセルだけランダムに平行移動させる演算を指定します。データ拡張は,ネットワークで過適合が発生したり,学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。

pixelRange = [-30 30];imageAugmenter = imageDataAugmenter(...“RandXReflection”,真的,...“RandXTranslation”pixelRange,...“RandYTranslation”, pixelRange);augimdsTrain = augmentedimagedastore (inputSize(1:2)),imdsTrain,...“DataAugmentation”, imageAugmenter);

他のデータ拡張を実行せずに検証イメージのサイズを自動的に変更するには,追加の前処理演算を指定せずに拡張イメージデータストアを使用します。

augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

学習オプションを指定します。転移学習の場合,事前学習済みのネットワークの初期の層からの特徴(転移された層の重み)を保持します。転移層での学習速度を下げるため,初期学習率を小さい値に設定します。上記の手順では,全結合層の学習率係数を大きくして,新しい最後の層での学習時間を短縮しています。この学習率設定の組み合わせによって,新しい層でのみ学習が急速に進み,他の層での学習速度は低下します。転移学習の実行時には,同じエポック数の学習を行う必要はありません。エポックとは,学習デ,タセット全体の完全な学習サ,クルのことです。ミニバッチのサ▪▪ズと検証デ▪▪タを指定します。学習中はValidationFrequency回の反復ごとにネットワ,クが検証されます。

选项= trainingOptions(“个”...“MiniBatchSize”10...“MaxEpochs”6...“InitialLearnRate”1的军医,...“洗牌”“every-epoch”...“ValidationData”augimdsValidation,...“ValidationFrequency”3,...“详细”假的,...“阴谋”“训练进步”);

転移層と新しい層とで構成されるネットワ,クの学習を行います。既定では,使用可能なgpuがある場合,trainNetworkはgpuを使用します。これには,并行计算工具箱™とサポートされているGPUデバイスが必要です。サポトされているデバスにいては,リリス別のgpuサポト(并行计算工具箱)を参照してください。そうでない場合はCPUが使用されます。trainingOptionsの名前と値のペアの引数“ExecutionEnvironment”を使用して,実行環境を指定することもできます。

netTransfer = trainNetwork(augimdsTrain,lgraph,options);

検証▪▪メ▪▪ジの分類

微調整したネットワクを使用して検証メジを分類します。

[YPred,scores] = category (netTransfer,augimdsValidation);

4個のサンプル検証メジと,その予測ラベルを表示します。

idx = randperm(numel(imdsValidation.Files),4);数字i = 1:4 subplot(2,2,i) i = readimage(imdsValidation,idx(i));imshow(I) label = YPred(idx(I));标题(字符串(标签));结束

検証セットに対する分類精度を計算します。精度とは,ネットワ,クによって予測が正しく行われるラベルの割合です。

YValidation = imdsValidation.Labels;accuracy = mean(YPred == YValidation)
准确度= 1

分類精度の向上に関するヒントは,深層学習のヒントとコを参照してください。

参照

[1] Krizhevsky, Alex, Ilya Sutskever和Geoffrey E. Hinton。深度卷积神经网络的ImageNet分类神经信息处理系统进展25(2012)。

[2]塞格迪,克里斯蒂安,刘伟,贾扬青,皮埃尔·塞尔曼内,斯科特·里德,德拉戈米尔·安格洛夫,杜米特鲁·埃尔汉,文森特·范豪克和安德鲁·拉宾诺维奇。“更深入地研究卷积。”IEEE计算机视觉和模式识别会议论文集(2015):1-9。

参考

|||||

関連するトピック