Stacked Autoencoder + Softmax-layer のNNをSVMへ転移学習したい

お世話になります。
Stacked Autoencoderで特徴量を学習した後、Softmax-layerで分類する分類器を作成しました。 ファインチューニング後、Softmax-layerの前までの層の出力を取り出し、SVMへ転移学習させたいのですが、どのように行えばよいでしょうか?
autoenc1 = trainAutoencoder( tTrainDatas, hiddensize(1) );
feat1 = encode(autoenc1, tTrainDatas);
...
softnet = trainSoftmaxLayer(feat4, tTrain);
deepnet = stack(autoenc1, ..., autoenc4, softnet);
deepnet = train(deepnet, xTrain, tTrain);

 Réponse acceptée

michio
michio le 14 Déc 2016
R2016b の時点では、ファインチューニング後にSoftmax-layerの前までの層の出力を取り出す機能は実装されていませんが、ファインチューニング後のネットワーク (deepnet) から 重み Weight とバイアス Biases を手動でコピーすることで、希望の処理を実現することは可能ではあります。
2つのオートエンコーダを使用する こちら の例で
deepnet = train(deepnet,X,T);
まで実行されたと想定して、ファインチューニングされた重みとバイアスをコピーする例を紹介しますので、参考にしてください。
% deepnet から対象となる重みとバイアスを取得
InputWeight = deepnet.IW{1};
LayerWeight = deepnet.LW{2,1};
InputBiases = deepnet.b{1};
LayerBiases = deepnet.b{2};
%
% 元々のオートエンコーダのエンコーダ部分を積層したもの encoder12
encoder12 = stack(autoenc1, autoenc2);
encoder12_fine = encoder12; % そのコピー
%
% 重みとバイアスを deepnet のものに置き換えます。
encoder12_fine.IW{1} = InputWeight;
encoder12_fine.LW{2,1} = LayerWeight;
encoder12_fine.b{1} = InputBiases;
encoder12_fine.b{2} = LayerBiases;
%
% 元々の stacked-autoencoderのSoftmax-layerの前までの層の出力
feature = encoder12(X);
% 重みとバイアスを置き換えた場合の出力
feature_fine = encoder12_fine(X);

2 commentaires

Yusuke Morikawa
Yusuke Morikawa le 17 Déc 2016
Michio様
返信ありがとうございます。 記載いただいた例でも、私がやりたい対象でも、無事転移学習を実施できました。
求める機能が見つからない中、新規にnetworkを作成して手動で諸々のパラメータをコピーしようとしていた矢先でしたので、返信内容がたいへん参考になりました。
ありがとうございます。
michio
michio le 17 Déc 2016
お役に立てたようで何よりです。ご連絡ありがとうございました。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Deep Learning Toolbox dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by