MATLAB Answers

3

re-train a pre-trained autoencoder

cedric MAGUETA RUIVO さんによって質問されました 2016 年 8 月 19 日
最新アクティビティ Grzegorz Knor さんによって 編集されました 2017 年 7 月 18 日
Hello, I want to retrain an autoencoder with a different set of images. autoencoder classe seems to not allowed this, so i transform my autoencoder into a classical neural network (with network function). but now i need to encode my data to train the next layer. How can i do that?

  0 件のコメント

サインイン to comment.

1 件の回答

回答者: Grzegorz Knor 2017 年 7 月 17 日
編集済み: Grzegorz Knor 2017 年 7 月 18 日

To encode data from retrained network you need to create new network, which contains only encoder layer. Please see the code (it is based on TrainSparseAutoencoderExample):
% load dataset
X = abalone_dataset;
% split it into two parts
X1 = X(:,1:2085);
X2 = X(:,2086:end);
% Train a first sparse autoencoder with default settings.
autoenc = trainAutoencoder(X1);
% Reconstruct inputs.
XReconstructed1 = predict(autoenc,X1);
% Compute the mean squared reconstruction error.
mseError1 = mse(X1-XReconstructed1)
% convert existed autoenc to network:
net = network(autoenc);
% retrain autoenc(net):
net = train(net,X2,X2);
% Reconstruct inputs.
XReconstructed2 = net(X2);
% Compute the mean squared reconstruction error.
mseError2 = mse(X2-XReconstructed2)
% compare biases
figure
bar([net.b{1} autoenc.EncoderBiases])
% compare weights
figure
plot(autoenc.EncoderWeights-net.IW{1})
% extract features from autoencoder
features1 = encode(autoenc,X1);
% create encoder form trained network
encoder = network;
% Define topology
encoder.numInputs = 1;
encoder.numLayers = 1;
encoder.inputConnect(1,1) = 1;
encoder.outputConnect = 1;
encoder.biasConnect = 1;
% Set values for labels
encoder.name = 'Encoder';
encoder.layers{1}.name = 'Encoder';
% Copy parameters from input network
encoder.inputs{1}.size = net.inputs{1}.size;
encoder.layers{1}.size = net.layers{1}.size;
encoder.layers{1}.transferFcn = net.layers{1}.transferFcn;
encoder.IW{1,1} = net.IW{1,1};
encoder.b{1} = net.b{1};
% Set a training function
encoder.trainFcn = net.trainFcn;
% Set the input
encoderStruct = struct(encoder);
networkStruct = struct(net);
encoderStruct.inputs{1} = networkStruct.inputs{1};
encoder = network(encoderStruct);
% extract features from net
features2 = encoder(X1);
% compare
figure
bar([features1(:,1),features2(:,1)])
If you use stacked autoencoders use encode function.
Here is a good example .

  0 件のコメント

サインイン to comment.



Translated by