ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

転移学習入門

この例では、転移学習を使用して、事前学習済みの畳み込みニューラル ネットワークである AlexNet の再学習を行い、新しい一連のイメージを分類する方法を説明します。この例を試して、MATLAB® でどれほど簡単に深層学習を始めることができるか確認してください。

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

データの読み込み

新しいイメージを解凍してイメージ データストアとして読み込みます。データを学習データセットと検証データセットに分割します。イメージの 70% を学習に使用し、30% を検証に使用します。

unzip('MerchData.zip');
imds = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');

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

事前学習済みの AlexNet ネットワークを読み込みます。Deep Learning Toolbox™ Model for AlexNet Network がインストールされていない場合、ダウンロード用リンクが表示されます。AlexNet は、100 万枚を超えるイメージで学習しており、イメージを 1000 個のオブジェクト カテゴリ (キーボード、マグ カップ、鉛筆、多くの動物など) に分類できます。このネットワークは広範囲にわたるイメージについての豊富な特徴表現を学習しています。このネットワークは入力としてイメージを取り、イメージ内のオブジェクトのラベルを各オブジェクト カテゴリの確率と共に出力します。

net = alexnet;

最後の層の置き換え

AlexNet の再学習を行って新しいイメージを分類するには、ネットワークの最後の 3 つの層を置き換えます。最後の全結合層のサイズが新しいデータセットのクラスの数 (この例では 5) と同じになるように設定します。新しい層での学習速度を転移された層より速くするには、全結合層の学習率係数を大きくします。

layersTransfer = net.Layers(1:end-3);
numClasses = numel(categories(imdsTrain.Labels));
layers = [
    layersTransfer
    fullyConnectedLayer(numClasses,'WeightLearnRateFactor',10,'BiasLearnRateFactor',10)
    softmaxLayer
    classificationLayer];

ネットワークの学習

ミニバッチのサイズ、検証データなどの学習オプションを指定します。InitialLearnRate を小さい値に設定して、転移層での学習速度を下げます。上記の手順では、全結合層の学習率係数を大きくして、新しい最後の層での学習時間を短縮しています。この学習率設定の組み合わせによって、新しい層でのみ学習が急速に進み、他の層での学習速度は低下します。

options = trainingOptions('sgdm', ...
    'MiniBatchSize',10, ...
    'MaxEpochs',6, ...
    'InitialLearnRate',1e-4, ...
    'ValidationData',imdsValidation, ...
    'ValidationFrequency',3, ...
    'Verbose',false, ...
    'Plots','training-progress');

学習データを使用してネットワークに学習させます。既定では、利用可能な GPU がある場合、trainNetwork は GPU を使用します (Parallel Computing Toolbox™、および Compute Capability 3.0 以上の CUDA® 対応 GPU が必要)。そうでない場合は CPU が使用されます。trainingOptions の名前と値のペアの引数 'ExecutionEnvironment' を使用して、実行環境を指定することもできます。

netTransfer = trainNetwork(imdsTrain,layers,options);

検証イメージの分類

微調整したネットワークを使用して検証イメージを分類し、分類精度を計算します。

YPred = classify(netTransfer,imdsValidation);
accuracy = mean(YPred == imdsValidation.Labels)
accuracy = 1

転移学習のより詳細な例については、AlexNet を使用した転移学習を参照してください。

参照

[1] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Advances in neural information processing systems. 2012.

[2] BVLC AlexNet Model. https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet

参考

| |

関連するトピック