上图是一个栈式自编码算法模型,属于无监督学习。栈式自编码神经网络是一个由多层自编码器组成的神经网络,其前一层自编码器的输出作为其后一层自编码器的输入。通过将重构的x与输入的x相减来计算误差。
encoder部分从原始2000维特征降至50维(根据实际情况,自定义特征数),有三个隐层,每一层都是提取的高维特征,最后一层作为降维后的特征可用作分类和回归。decoder部分输出重构的x,通过调整encoder和decoder的参数,使得重构误差最小。
含有一个隐层的AE模型
栈式自编码算法代码解读
代码来源:Matlab Toolbox for Dimensionality Reduction
function [model, mappedX] = train_deep_autoenc(X, layers, lambda)
%TRAIN_DEEP_AUTOENC Trains a deep feedforward autoencoder on X
%X是原始数据集,NxD。layers是一维数组,存放每层降维的特征数,按上述图中,则是[1000 500 50]。lambda是L2规则项的系数(默认为0),
if ~exist('lambda', 'var') || isempty(lambda)
lambda = 0;
end
% Pretrain model using stacked denoising auto-encoders
no_layers = length(layers);%encoder的层数,上述图片中是3层
model = cell(2 * no_layers, 1);%初始化SAE模型,6层
mappedX = X;
for i=1:no_layers %预训练encoder部分的参数W和b
noise = 0.1;
max_iter = 30;
[network, mappedX] = train_autoencoder(mappedX, layers(i), noise, max_iter);%传入每一个隐层的特征数
model{i}.W = network{
1<