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

autoencoderdeep learningDeep Learning ToolboxMATLABsoftmaxsvmtransfer learning、ディープラーニング日本語深層学習転移学習

お世話になります。
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);

Best Answer

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