一:引言.sae,dae,dropout模型简介
上面提到的三个模型都是在经典的多层神经网络的基础上加深构架得到;例如sae(Stack autoencoder)就是理堆叠多个autoencoder,然后使用fine_tuning过程;dae(Denoising autoencoder)是在标准的sae基础上给输入数据加入噪声,利用污染后的数据进行sae;dropout 则是随机忽略隐层节点来训练多个不同的模型,然后通过模型平均来预测。
下面就详细讲解一下这个sae框架的训练过程,以及调用函数的说明。
二:实例讲解
1. 试验准备:
DeepLearnToolbox-master代码:https://github.com/rasmusbergpalm/DeepLearnToolbox
2. 文件配置:
2.1 首先打开新建的test_sae.m文件;
2.2 然后把current folder,窗口转到……matlabdlToolBox\DeepLearnToolbox-master
2.3 在command 窗口输入:addpath(genpath('.'));
2.4 打开test_sae.m,运行就ok了
2.5 等着出结果
3.网络结构说明本文以minist手写数字识别为例,输入数据为784,即visible层为784个节点。
假设我们训练的网络结构为:784——200—— 100—— 10,也就是说有4层,一个输入层,2个中间隐层;1个输出隐层,来进行预测分类。
网络结构如图:
4.主函数代码:test_sae.m
clear all; close all; clc;
%% //导入数据
load mnist_uint8;
train_x = double(train_x)/255;
test_x = double(test_x)/255;
train_y = double(train_y);
test_y = double(test_y);
%%一:采用autoencoder进行预训练
rng(0);%高版本的matlab可以使用这个语句,低版本会出错
sae = saesetup([784 200 100]);
sae.ae{1}.activation_function = 'sigm';
sae.ae{1}.learningRate = 1;
sae.ae{1}.inputZeroMaskedFraction = 0.;
sae.ae{2}.activation_function = 'sigm';
sae.ae{2}.learningRate = 1;
sae.ae{2}.inputZeroMaskedFraction = 0.;
opts.numepochs = 1;
opts.batchsize = 100;
visualize(sae.ae{1}.W{1}(:,2:end)')
%二:fine_tuning过程
% Use the SDAE to initialize a FFNN
nn = nnsetup([784 200 100 10]);
nn.activation_function = 'sigm';
nn.learningRate = 1;
%add pretrained weights
nn.W{1} = sae.ae{1}.W{1};
nn.W{2} = sae.ae{2}.W{1};
% Train the FFNN
opts.numepochs = 1;
opts.batchsize = 100;
nn = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);
str = sprintf('testing error rate is: %f',er);
disp(str)
三:pre_training阶段代码详解
3.1:网络结构建立
Sae网络就是堆叠多个autoencoder网络,所以此网络结构由2个autoencoder构成,分别是:v—h1—v和h1—h2—h1.
此处主要利用saesetup函数来实现,
3.1.1 Saesetup函数说明