本文将以matlab为工具介绍下如何实现深度神经网络,以方便初学者,神经元激活函数为 ReLU。
ReLU函数的数学公式很简单ReLU(x)=max(x,0),但其对DNN的贡献是巨大的。
若DNN用于数据分类,则可以简单的认为其主要由两个部分组成:多隐层网络+分类器。分类器以softmax为例。
第一步:准备数据
1)将你需要分类的样本数据以每列的形式保存于矩阵中;->TrainData
2)将每个样本的类别标记按数据顺序存为一行向量,类别为1,2,3,…,n;->TrainLabel
第二步:网络配置、参数初始化和转换
inputsize=size(TrainData ,1);%获取数据的维度
datanum=size(TrainData ,2);%获取数据的数量
netsize=[inputsize,50,50,50];%可以简单地用一个向量来定义网络的深度,以及每层神经元数目。这表示一个三隐藏层的DNN,神经元数都为50。
classnum=2;%类别数目
DNN中的可训练参数主要为每层的权值W,偏置b,以及softmax 分类器的的参数SoftmaxTheta;
lastsize=netsize(end)+1;%网络最后一层神经元数数目,再考虑一个偏置。
stack = initializeNet(netsize);%初始化网络参数,以结构体的形式保存。
[stackTheta, netconfig] = stack2params(stack);%在训练时,往往需要将参数转成一列向量,提供给损失函数。stack ->stackTheta,netconfig保存一些结构参数
SoftmaxTheta = 0.0005 * randn(lastsize * classnum, 1);
Theta=[ SoftmaxTheta ; stackTheta ];%最终网络需要的参数
function stack = initializeNet(netsize) layersize=length(netsize(:)); stack = cell(layersize-1