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

 채택된 답변

michio
michio 2016년 12월 14일

1 개 추천

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

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

질문:

2016년 12월 9일

댓글:

2016년 12월 17일

Community Treasure Hunt

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

Start Hunting!

Translated by