主要内容

。

新しいイメージを分类するための深层学习ネットワーク学习

このこのでは,転移学习习を使し,畳み込みニューラルネットワークの再学习习行,新闻一般のイメージををするを明します。

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

転移学习は,深层学习アプリケーションでよくされていますを习习のネットワークをして,新しいタスクの学问。通讯は,転移,ランダムに初期化された重みでゼロからネットワークに学习させるよりもはるかに简単で时间がかかりません。少ない数の学习イメージを使用して,新しいタスクに学习済みの特徴を高速に転移できます。

データの読み込み

新しいイメージを解凍してイメージデータストアとして読み込みます。この非常に小さいデータセットには75枚のイメージのみが含まれています。データを学習データセットと検証データセットに分割します。イメージの70%を学習に使用し,30%を検証に使用します。

解压缩(“MerchData.zip”);imd = imageDatastore ('merchdata'......“IncludeSubfolders”,真的,......“LabelSource”'foldernames');[IMDStrain,IMDSValidation] = SpliteachLabel(IMDS,0.7);

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

事前学習済みのGoogLeNetネットワークを読み込みます。深度学习工具箱™模型对于Googlenet网络サポートパッケージがインストールさていないない合,ダウンロード用リンクが表示され。

別の事前学習済みネットワークを試すには,この例をMATLAB®で開き,別のネットワークを選択します。たとえば,googlenetよりも高速なネットワークである挤压を試すことができます。この例は,他の事前学習済みネットワークを使用して実行することもできます。使用可能なすべてのネットワークについては,事前学习済みのネットワークネットワーク読み込み読み込みを参照してください。

净=googlenet;

analyzeNetworkをアーキテクチャを対话的に,ネットワークアーキテクチャを対话详细。

analyzeNetwork(净)

ネットワークの层数�异なるサイズのの力イメージが必要なながありますたとえば,七象ネットワークはサイズ299 x 299 x 3ののが必要です。

Net.Layers(1)
ans = ImageInputLayer with properties: Name: 'data' InputSize: [224 224 3] Hyperparameters DataAugmentation: 'none' normalize: 'zerocenter' normalize: dimension: 'auto' Mean: [224×224×3 single]
InputSize = Net.Layers(1).InputSize;

最後の層の置き換え

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

ネットワークがalexnet,vgg-16,vgg -19,vgg -19など系列网络オブジェクトである場合,网。层数のの层のリストリストをに変换しし

如果ISA(网,'系列网络')LGRAPH = LayerGraph(Net.Layers);别的lgraph = layerGraph(净);结尾

置き换える2つの层の名前见つけ见つけます。これは动弹で行为こと,サポート关联findlayerstoreplaceをを用しての层を自动的ににことことももできできでき

[learnableLayer, classLayer] = findLayersToReplace (lgraph);[learnableLayer, classLayer]
ANS = 1×2层阵列,带图层:1'损耗3分类器'完全连接的1000完全连接的第2层'输出'分类输出CrossentRopyex,具有“Tench”和999其他类

ほとんどほとんどネットワークネットワークで,学校可能な重みを最后の层は全全ですですですですです层を。この全全全层,新しいデータセットのクラスの数(この例ではクラスクラス数(このこので5)とと数ののを持つ新闻に置き換えます。SqueezeNet などの一部のネットワークでは、その代わりに最後の学習可能な層が 1 x 1 畳み込み層となっています。この場合は、その畳み込み層を、クラスの数と同じ数のフィルターを持つ新しい畳み込み層に置き換えます。新しい層での学習速度を転移された層より速くするには、層の学習率係数を大きくします。

numClasses =元素个数(类别(imdsTrain.Labels));如果isa (learnableLayer'nnet.cnn.layer.fulleConnectedLayer') newLearnableLayer = fullconnectedlayer (numClasses,......'名称''new_fc'......“WeightLearnRateFactor”10,......'biaslearnratefactor'10);eleesifisa (learnableLayer'nnet.cnn.layer.convolution2dlayer')newlearnablelayer =康兰调整2dlayer(1,numcrasses,......'名称''new_conv'......“WeightLearnRateFactor”10,......'biaslearnratefactor'10);结尾Lgraph = ReployElayer(Legraph,SechnableLayer.Name,NewLearnablayer);

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

newclasslayer = classificationlayer('名称''new_classoutpul');lgraph = replaceElayer(Lapraph,ClassLayer.name,NewClassLayer);

新しい層が正しく結合されていることを確認するには,新しい層グラフをプロットして,ネットワークの最後の方の層を拡大します。

数字(“单位”'标准化'“位置”,[0.3 0.3 0.4]);绘图(3)ylim([0,10])

初期の層の凍結

これで,新しい一连のイメージでネットワークに再学习させる准备が整いました。オプションで,ネットワークの初期の层について学习率を0に设定すると,それらの层の重みを “冻结” できます学习中。にTrainnetwork.�が小さい综合,寿命ののネットワーク层を冻结,新しいデータセットに対するこれら层の适を防止こともできます防止もできます。

层层グラフの层层およびおよび结抽出し,冻结する层を选択ます.Googlenetでは,最初の10个のネットワークネットワークのの''のののののネットワークステムステムサポートサポートサポートfreezeWeightsを使使て,最初の10个の层习率を0に设定しし。附近createLgraphUsingConnectionsを使用して,すべての層を元の順序で再結合します。新しい層グラフに含まれる層は元と同じですが,初期の層の学習率は0に設定されています。

图层= lgraph.Layers;Connections = Lcraph.Connections;图层(1:10)= FreezeWeights(图层(1:10));Lgraph = CreateLgraphusConnections(层,连接);

ネットワークの学習

ネットワークにはサイズが224 x 224 x 3ののデータにあるイメージサイズ拡异なりますますます异なりますます使しし习イメージ使を。学习イメージに対して実行する追加の拡演算演算,学院イメージを縦轴に沿ってに反転させる演算やランダム向させる演算や,水平方向および垂直に大大30ピクセルだけランダムに平行动手させて最大10%スケールアップする演算を指定します。データデータ张は,ネットワークで过过适が生效したり,学校イメージの正当なが记忆されたりことをするさたり役立ちするを防止のに役立ちますますをを防止の役立ちますます。

PIXELRANGE = [-30 30];scalerange = [0.9 1.1];imageaugmenter = imagedataAugmenter(......“RandXReflection”,真的,......“RandXTranslation”,pixelrange,......“RandYTranslation”,pixelrange,......'randxscale',scalerange,......'randyscale', scaleRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,......'dataaugmentation',imageaugmender);

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

augimdsvalidation = augmentedimagedataStore(输入(1:2),IMDSValidation);

学习オプションを指定します。InitialLearnRateを小さい値に設定して,まだ凍結されていない転移層での学習速度を下げます。上記の手順では,最後の学習可能な層の学習率係数を大きくして,新しい最後の層での学習時間を短縮しています。この学習率設定の組み合わせによって,新しい層では高速に学習が行われ,中間層では学習速度が低下し,凍結された初期の層では学習が行われません。

学习するする数をしし习习の実习は必要,学校,学院习セットことです完全习习のことです。指定します。エポックごとに1回,検定精锐を计算し。

miniBatchSize = 10;valFrequency =地板(元素个数(augimdsTrain.Files) / miniBatchSize);选择= trainingOptions (“个”......'minibatchsize'miniBatchSize,......'maxepochs'6......'italllearnrate',3e-4,......'洗牌'“every-epoch”......“ValidationData”,augimdsvalidation,......“ValidationFrequency”valFrequency,......“详细”假的,......'plots''培训 - 进步');

学习データを使使をネットワークに学习习さますますせせせははは,利用可根据,GPUがある综合,Trainnetwork.はGPUを使用します(并行计算工具箱™,および以3.0计算能力上のCUDA®対応GPUが必要)。そうでない場合,Trainnetwork.はCPUを使使ます。trainingOptionsの名前と値のペアの引数'executionenvironment'をを环境てするできできますますためため,実ため,学校,学校,学校,学院は短。

网= trainNetwork (augimdsTrain、lgraph选项);

検证イメージの分享

微调整したネットワークを使使用して検证イメージをし,分享精选をします。

(YPred,聚合氯化铝)=(网络,augimdsValidation)进行分类;准确度= mean(YPred == imdsValidation.Labels)
精度= 0.9000.

4枚のサンプル検証イメージを,予測ラベルとイメージがそれらのラベルを持つ予測確率と共に表示します。

idx = randperm(元素个数(imdsValidation.Files), 4);数字为了i = 1:4子图(2,2,i)i = ReadImage(IMDSValidation,IDX(I));imshow(i)标签= ypred(idx(i));标题(字符串(标签)+”、“+ num2str(100 * max(probs(idx(i),:)),3)+“%”);结尾

参照

Szegedy, Christian, Liu Wei, Jia Yangqing, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich。“在曲折中走得更深。”在计算机视觉与模式识别IEEE会议论文集1 - 9页。2015.

参考

||||||||||

関連するトピック