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);

 Akzeptierte Antwort

michio
michio am 14 Dez. 2016

1 Stimme

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by