资源描述:
《基于relu和softmax的简单深度神经网络matlab代码设计-20170508》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于ReLU和Softmax的简单深度神经网络matlab代码设计本文以matlab为工具介绍下如何实现神经元激活函数为ReLU的深度神经网络。ReLU函数的数学公式很简单ReLU(x)=max(x,0),但其对DNN的贡献是巨大的。若DNN用于数据分类,则可以简单的认为其主要由两个部分组成:多隐层网络+分类器。分类器以softmax为例。第一步:准备数据1)将你需要分类的样本数据以每列的形式保存于矩阵中;->TrainData 2)将每个样本的类别标记按数据顺序存为一行向量,类别为1,2,3,…,n;->TrainLabel并将数据保存入MyData.mat数据文件中。采用以下程序实现数据的
2、生成。 x=1:10y=1:8:80rt=x.*x-50*x+40*y-y.^2;TrainData=[x;y];fork=1:10v_rt_k=rt(k)ifrt(k)<=0TrainLabel(k)=1;elseTrainLabel(k)=2;endendsave('MyData.mat','TrainData','TrainLabel')第二步:网络配置、参数初始化和转换将第一步中准备好的数据载入内存中,并采用以下程序运行数据。1.Main_functionwithoutminFuncclearallclccloseallloadMyData.matinputsize=size(Trai
3、nData,1);%获取数据的维度datanum=size(TrainData,2);%获取数据的数量10%netsize=[inputsize,50,50,50];%可以简单地用一个向量来定义网络的深度,以及每层神经元数目。这表示一个三隐藏层的DNN,神经元数都为50。netsize=[inputsize,4,3];classnum=2;%类别数目lastsize=netsize(end)+1;%网络最后一层神经元数数目,再考虑一个偏置。stack=initializeNet(netsize);%初始化网络参数,以结构体的形式保存。v_stack=stackv_stack_1=stack{1
4、}v_stack_1_w=stack{1}.wv_stack_1_b=stack{1}.bv_stack_2=stack{2}v_stack_2_w=stack{2}.wv_stack_2_b=stack{2}.b%在训练时,往往需要将参数转成一列向量,提供给损失函数。stack->stackTheta,netconfig保存一些结构参数[stackTheta,netconfig]=stack2params(stack);v_stackTheta=stackThetav_netconfig=netconfigv_netconfig_layersizes=netconfig.layersizes
5、v_lastsize=lastsizeSoftmaxTheta=0.0005*randn(lastsize*classnum,1);v_SoftmaxTheta=SoftmaxThetaTheta=[SoftmaxTheta;stackTheta];%最终网络需要的参数%thefollowingpartisforthetraingepoch.batchsize=10;%batchsize=5;%%每次训练的小批量样本数batchnum=floor(size(TrainData,2)/batchsize);DataNum=size(TrainData,2);alpha=1e-2;%
6、这是学习率,一般随着网络的悬念都需要不断的减小lambda=1e-4;%Weightdecayparameterforepoch=1:16000v_epoch=epochidx=randperm(DataNum);fort=1:batchnumsubdata=TrainData(:,idx((t-1)*batchsize+1:(t)*batchsize));10sublabel=TrainLabel(idx((t-1)*batchsize+1:(t)*batchsize));[cost,grad]=ReLUDNNCost(Theta,classnum,lastsize,netconfig,la
7、mbda,subdata,sublabel);Theta=Theta-alpha*grad;v_grad=gradendend%Note:当Theta传递进入损失函数内部时,还需要从Theta抽出stackTheta,再转成stack代码如下,都是AndrewNg的教程里面的提供的。 1.Main_functionwithminFuncofUFLDLclearallclccloseallloadM