版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于ReLU和Softmax的简单深度神经网络matlab代码设计本文以matlab为工具介绍下如何实现神经元激活函数为ReLU的深度神经网络。ReLU函数的数学公式很简单ReLU(x)=max(x,O),但其对DNN的贡献是巨大的。若DNN用于数据分类,则可以简单的认为其主要由两个部分组成:多隐层网络+分类器。分类器以softniax为例。第一步:准备数据将你需要分类的样本数据以每列的形式保存于矩阵中:-TraniData将每个样本的类别标记按数据顺序存为一行向量,类别为1,2,3,-,n:-TramLabel并将数据保存入MyData.mat数据文件中。采用以下程序实现数据的生成。x=l
2、:10V=l:8:80Jrt=x.*x-50*x+40*v-v.A2;JJ7TrauiData=x;y;fbik=l:10v_k=rt(k)ifrt(k)4,3;classnum=2;%类别数目lastsize=iietsize(end)+1;%网络最后一层神经元数数目,再考虑一个偏置。stack=imtializeNet(netsize);%初始化网络参数,以结构体的形式保存。v_stzck=stackv_stack_l=stack1v_stack_l_w=stack1.wv_stack_l_b=stack1.bv_stack_2=stack2v_stzck_2_w=stack2v_stac
3、k_2_b=stack2.b%在训练时,往往需要将参数转成一列向量,提供给损失函数。stack-stackTlieta,netcoiifig保存一些结构参数stackTheta,netconfig=stack2params(stack);v_stackTheta=stackThetav_netcoiifig=iietconfigv_netcoiifig_layersizes=iietconfig.layersizesv_lastsize=lastsizeSofhnaxTheta=0.0005*randn(lastsize*classnum,1);v_SofhnaxTlieta=Softinax
4、ThetaTlieta=SofhnaxTlieta;stackTheta;%最终网络需要的参数%thefollowingpartisforthetraingepoch.batchsize=10;%batclisize=5;%每次训练的小批屋样本数Vspanbatchnum=floor(size(TramDat2,2)/batchsize);DataNum=size(TrainData?2);alpha=le-2;%这是学习率,一般随着网络的悬念都需要不断的减小lambda=le-4;%Weightdecayparameterforepoch=l:16000v_epoch=epochidx=i-
5、andpenii(DataNiun);fort=l:batclinumsubdata=TrainData(:,idx(t-1)*batchsize+1:(t)*batchsize);sublabel=TraiiiLabel(idx(t-1)*batchsize+1:(t)*batchsize);cost,gi,ad=ReLUDNNCost(Theta?classnumJastsize,netconfigJambdasubdatasublabel);Theta=Theta-alpha*gi-ad;v_grad=gra(iendend%Note:当Theta传递进入损失函数内部时,还需要从Thet
6、a抽出stackTheta,再转成stack代码如卜,都是AndrewNg的教程里面的提供的。Main_module_without_minFunclclearallclccloseallloadMyData.matmputsize=size(TrauiDataJ);%获取数据的维度datanum=size(TiaHiData,2);%获取数据的数量%netsize=mputsize,5O,5O,5O;%可以简单地用一个向量来定义网络的深度,以及每层神经元数目。这表示一个三隐藏层的DNN,神经元数都为50。netsize=inputsize,4,3;classnum=2;%类别数目lastsi
7、ze=netsize(end)+l;%网络最后一层神经元数数目,再考虑一个偏置。%v_lastsize=lastsizestack=mitializeNet(netsize);%初始化网络参数,以结构体的形式保存。v_stack=stackv_stack_l=stack1v_stack_l_w=stackl.wv_stack_l_b=stackl.bv_stack_2=stack2v_stack_2_w=stack2.wv_stack_2_b=stack2.b%在训练时,往往需要将参数转成一列向量,捉供给损失函数。stack-stackTlieta,netconfig保存一些结构参数stack
8、Theta,netconfig=stack2paianis(stack);v_stackTheta=stackThetav_netconfig=netcoiifigv_netconfig_layeisizes=netconfig.layersizesv_lastsize=lastsizeSoftmaxTheta=0.0005*randn(lastsize*classnum,1);v_SoftniaxTheta=SoftniaxThetaTheta=SoftmaxTheta;stackTheta;%最终网络需要的参数%thefollowingpartisfortheniinFuncmtheUFL
9、DLtutorialoptions.Metliod=Ibfgs;options.maxlter=20000; options.MaxFunEvals=1000000:options.display=on:lambda=le-4;OptTheta,cost=nunFunc(p)ReLUDNNCost(p.classnumJastsizeaietconfigJambda,TrauiData,TrauiLabel).Theta,options);v_TiauiLabel=TrauiLabelsave(Xveights_niatnx_niHiFunc.mat,OptTheta,)%thefollowu
10、igpartisfortheSGDtramgepoch%batchsize=10;%batchsize=5;%每次训练的小批量样本数%batclmum=flooi(size(TrauiData,2)/batchsize);%DataNum=size(TrainData,2);%alpha=le-2;%这是学习率,一般随着网络的悬念都需要不断的减小%lambda=le-4;%Weightdecaypaiameter%forepoch=l:16000%v_epoch=epoch%idx=randperm(DataNum);%fort=l:batclmum%subdata=TrauiData(:4d
11、x(t-l)*batchsize+l:(t)*batchsize);%sublabel=TraiiiLabel(idx(t-l)*batchsize+l:(t)*batchsize);%cost,grad=ReLUDNNCost(Theta,classnumJastsizejietconfig,lainbda,subdata,sublabel);%Theta=Theta-alpha*grad;%v_grad=grad%end%end%save(,weights_matnx_nuiiFunc.matYTheta1)ReLUDNNCostfimctioncostgrad=ReLUDNNCost(t
12、heta,numClasses,lasthiddenSize?netconfigjambda,tiauiDatatianiLabels)%参数获取的一些操作softmaxTheta=reshape(theta(l:lastluddenSize*numClasses),numClasses,lasthiddenSize);stack=paiams2stack(theta(lasthiddenSize*numClasses+1:end),netcoiifig);%从theta向量中抽取网络权值参数并转化stackgiad=cell(size(stack);PARA=cell(numel(stack
13、),1);%这里保存在应用BP算法求梯度时需要的数据datimum=size(trainD3ti2);%传进来的样本数%开始前馈,网络虽然多层,但只是重复而己data=traniData;ford=1:numel(stack)PARAd.a=data;z2=(stackd.w*data)+stackd.b*ones(l,datamim);a2=relu(z2);%RelU函数data=a2;PARAd.daz=dielu(z2);%RelU函数的导函数enda2=a2;ones(1,datanum);%开始求解损失%v_trainLabels=tianiLabels%v_dataiium=da
14、tanumgroundTmth=fiilKsparseCtiainLabels,1:datanum,1);%这是AndrewNG教程原版的语句,但其在应用小批量样本训练时会出错,卞一行是另一种实现方式%v_trainLabels=tianiLabels%v_numClasses=iiumClasses%velement1=repmat(trainLabels4iiimClasses,1)%v_element2=(l:1:numClasses)r%grouiidTnithsxfiineqrepmatCtraniLabelsnumClasses,1),(1:l:numClasses)*);%v_g
15、roim(iTruth=groimdTruth%pauseM=softniaxTheta*a2;h=exp(M);h=bsxfim(rdivide,h,sum(h);%v_size_groundTiiith=size(gi-ouiidTiiith)%v_log_h=size(log(h)cost=-l/dataiium*sum(sum(grouiidTnith.*log(h)*lambda/2*sum(sum(softniaxTheta.A2);%softmax损失函数,没啥好说的softmaxThetaGrad=-1/datanum*(gi-ouiidTmth-h)*a2,)+lambda*
16、softniaxTheta;%softinax目标函数对softniaxTheta的导数,predeltasoftmaxTheta1*(gi-oundTmtli-h);%想理解这里,还有后面的梯度是如何计算出的,建议看那本关于矩阵的工具书TheMatiixCookbook)predelta=predelta(1:end-1,:);ford=numel(stack):-l:1delta=predelta.*PARAd.daz;stackgi,add.Ar=delta*PARA.d.a,/datanum;%.*PARAd.idxstackgradd.b=sum(delt2,2)/dataiium;
17、predelta=stackd.w*delta;endgrad=softniaxThetaGrad(:);stack2params(stackgrad);endi?Jz一SUUPPSDPUC】=AVI玄oss(T+QZ一S2q一S+QZ一SSPPTq)匕bs一(9)匸bsHYvz一stmz一s上q-sif)QZ一stmzTSUQPPWEz一sjoACI二丄Kywtqns】qa)=qohqoss(cvz一stu)MU3HQZJSJQA(Qz方tu)tNoz二cpmiH上ossUOTSny富NQZnEF.s9PUCD即K-M方2凶00女)宙jaoahhjp(X)期s)sojqzh(djp(XMqa
18、lpHelpnopomy三七pspuojrox)xmuH3(x)noJH出UOTSnynlQJ寸(T二ZSQZ方】QAUbbguootuu2q+sod】ngsod】no)sunncd1ifnumel(stack)=0netconfig.inputsize=0;netconfig.layersizes=;elsenetconfig.inputsize=size(stackl.w,2);netconfig.layersizes=;ford=1:numel(stack)netconfig.layersizes=netconfig.layersizes;size(stackd.w,1);endend第
19、三步,采用已训练的深度网络对输入数据进行测试1Main_test_functionclearallclccloseallloadMyData.matloadreights_niatrix.matmputsize=size(TrauiData,1);%获取数据的维度datanum=size(TraniData,2);%获取数据的数量%netsize=inputsize,50,50,50;%可以简单地用一个向量来定义网络的深度,以及每层神经元数目。这表示一个三隐藏层的DNN,神经元数都为50。netsize=inputsize,43;classnum=2;%类别数目netconfig?.mputsize=iietsize(1)netconfig2.1ayersizes1=iietsize(2)netconfig2.1ayersizes2=iietsize(3)netconfig?.Iayersizes=netcoiifig2.layersizes*lastsize=iietsize(end)+l;%网络最后一层神经元数数目,再考虑一个偏置。vresult=fdrvard_computation(Thetaclassnunilastsizenetcoiifig25TraniData)v_TraiiiLabel=TrainLabel2.for
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年深圳市福田区荔园教育集团附属幼儿园公开招聘短期教师备考题库含答案详解
- 中国电建集团贵州工程有限公司2026届秋季招聘150人备考题库及完整答案详解一套
- 2025年新疆晨玖建设工程有限责任公司市场化选聘工作人员备考题库及1套完整答案详解
- 简约企业年终工作总结汇报模板
- 中国人民人寿保险股份有限公司重庆市分公司2026年度校园招聘备考题库及参考答案详解1套
- 2025年复旦大学附属华东医院《老年医学与保健》专职编辑招聘备考题库带答案详解
- 2025年重庆两江新区民心佳园小学校物业项目经理招聘备考题库及一套完整答案详解
- 2025年浙江省经济建设投资有限公司招聘备考题库完整答案详解
- 2025年关于公开招聘派遣至莆田市城厢区交通运输局非在编工作人员的备考题库及完整答案详解一套
- 2025年中南大学湘雅基础医学院非事业编制人员招聘备考题库及答案详解参考
- 大连市社区工作者管理办法
- 2025年河北地质大学公开招聘工作人员48名笔试模拟试题及答案解析
- 火灾探测器的安装课件
- 酒店转让合同协议书范本大全
- DB21∕T 3722.3-2023 高标准农田建设指南 第3部分:项目预算定额
- 压力管道质量保证体系培训
- 2025年度数据中心基础设施建设及运维服务合同范本3篇
- 【八年级上册地理】一课一练2.2 世界的气候类型 同步练习
- 2024人形机器人产业半年研究报告
- 筋膜刀的临床应用
- 中国石化《炼油工艺防腐蚀管理规定》实施细则(最终版)
评论
0/150
提交评论