MATLAB Answers

re-train a pre-trained autoencoder

cedric MAGUETA RUIVO 님이 질문을 제출함. 19 Aug 2016
최근 활동 Grzegorz Knor 님이 편집함. 18 Jul 2017
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 님의 답변 17 Jul 2017
Grzegorz Knor 님이 편집함. 18 Jul 2017

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