




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下面是BPNET.CPP源文件#=BpNet.cpp : implementation file=/人工神经网络BP算法/1、动态改变学习速率/2、加入动量项/3、运用了Matcom4.5的矩阵运算库(可免费下载,头文件matlib.h),/ 方便矩阵运算,当然,也可自己写矩阵类/4、可暂停运算/5、可将网络以文件的形式保存、恢复/作者:同济大学材料学院 张纯禹/email:chunyu_79/QQ:53806186/欢迎不断改进!欢迎讨论其他实用的算法!/#include BpNet.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CBpNetIMPLEMENT_SERIAL( CBpNet, CObject, 1 )CBpNet:CBpNet()initM(MATCOM_VERSION);/启用矩阵运算库CBpNet:CBpNet()exitM();delete this;/ CBpNet message handlers/创建新网络void CBpNet:Create(Mm mInputData, Mm mTarget, int iInput, int iHidden, int iOutput) int i,j;mSampleInput=zeros(mInput.rows(),mInput.cols();mSampleTarget=zeros(mTarget.rows(),mTarget.cols();mSampleInput=mInputData;mSampleTarget=mTarget;this-iInput=iInput;this-iHidden=iHidden;this-iOutput=iOutput;/创建计算用的单个样本矩阵mInput=zeros(1,this-iInput);mHidden=zeros(1,this-iHidden);mOutput=zeros(1,this-iOutput);/创建权重矩阵,并赋初值mWeighti=zeros(this-iInput,this-iHidden);mWeighto=zeros(this-iHidden,this-iOutput); /赋初值for(i=1;iiInput;i+) for(j=1;jiHidden;j+) mWeighti.r(i,j)=randab(-1.0,1.0);for(i=1;iiHidden;i+) for(j=1;jiOutput;j+) mWeighto.r(i,j)=randab(-1.0,1.0);/创建阙值矩阵,并赋值mThresholdi=zeros(1,this-iHidden);for(i=1;iiHidden;i+) mThresholdi.r(i)=randab(-1.0,1.0);mThresholdo=zeros(1,this-iOutput);for(i=1;iiOutput;i+) mThresholdo.r(i)=randab(-1.0,1.0);/创建权重变化矩阵mChangei=zeros(this-iInput,this-iHidden);mChangeo=zeros(this-iHidden,this-iOutput);mInputNormFactor=zeros(iInput,2);mTargetNormFactor=zeros(iOutput,2);/误差矩阵 mOutputDeltas=zeros(iOutput); mHiddenDeltas=zeros(iHidden);/学习速率赋值dblLearnRate1=0.5;dblLearnRate2=0.5;dblMomentumFactor=0.95;m_isOK=false;m_IsStop=false;dblMse=1.0e-6;/误差限dblError=1.0;lEpochs=0;/根据已有的网络进行预测Mm CBpNet:simulate(Mm mData)int i,j;Mm mResult;Mm data=zeros(mData.rows(),mData.cols();data=mData;if(mData.cols()!=iInput):MessageBox(NULL,输入数据变量个数错误!,输入数据变量个数错误!,MB_OK);return mResult;mResult=zeros(data.rows(),iOutput); /正规化数据for(i=1;i=data.rows();i+) for(j=1;j=data.cols();j+) data.r(i,j)=(data.r(i,j)-mInputNormFactor.r(j,1)/(mInputNormFactor.r(j,2)-mInputNormFactor.r(j,1);/计算 int iSample; Mm mInputdata,mHiddendata,mOutputdata; mInputdata=zeros(1,iInput); mHiddendata=zeros(1,iHidden); mOutputdata=zeros(1,iOutput); double sum=0.0; for(iSample=1;iSample=data.rows();iSample+) /输入层数据 for(i=1;i=iInput;i+) mInputdata.r(i)=data.r(iSample,i); /隐层数据 for(j=1;j=iHidden;j+) sum=0.0; for(i=1;i=iInput;i+) sum+=mInputdata.r(i)*mWeighti.r(i,j); sum-=mThresholdi.r(j); mHiddendata.r(j)=1.0/(1.0+exp(-sum); /输出数据 for(j=1;j=iOutput;j+) sum=0.0; for(i=1;i=iHidden;i+) sum+=mHiddendata.r(i)*mWeighto.r(i,j); sum-=mThresholdo.r(j); mOutputdata.r(j)=1.0/(1.0+exp(-sum); /转换 for(j=1;jdblMse&!m_IsStop) dblTotal=0.0; for(iSample=1;iSample1.04)/动态改变学习速率 dblLearnRate1*=0.7; dblLearnRate2*=0.7; else dblLearnRate1*=1.05; dblLearnRate2*=1.05; lEpochs+; dblError=dblTotal; :PeekMessage(&msg,NULL,0,0,PM_REMOVE); :DispatchMessage(&msg); msg.message=-1; :DispatchMessage(&msg);/这样可以消除屏闪和假死机if(dblError=dblMse)m_isOK=true;elsem_isOK=false;void CBpNet:stop()m_IsStop=true;double CBpNet:randab(double a, double b) /注意,如果应用矩阵库,头文件matlib.h对rand()函数重新定义,只产生(0,1)/之间的随机数return(b-a)*rand()+a);/将数据转化到(0,1)区间void CBpNet:normalize()int i,j;/输入数据范围mInputNormFactor=scope(mSampleInput);/目标数据范围mTargetNormFactor=scope(mSampleTarget);for(i=1;i=mSampleInput.rows();i+) for(j=1;j=mSampleInput.cols();j+) mSampleInput.r(i,j)=(mSampleInput.r(i,j)-mInputNormFactor.r(j,1)/(mInputNormFactor.r(j,2)-mInputNormFactor.r(j,1);for(i=1;i=mSampleTarget.rows();i+) for(j=1;j=mSampleTarget.cols();j+) mSampleTarget.r(i,j)=(mSampleTarget.r(i,j)-mTargetNormFactor.r(j,1)/(mTargetNormFactor.r(j,2)-mTargetNormFactor.r(j,1);/前向计算 void CBpNet:forward(int iSample)/根据第iSample个样本,前向计算 if(iSamplemSampleInput.rows() MessageBox(NULL,无此样本数据:索引出界!,无此样本数据:索引出界!,MB_OK); return; int i,j; double sum=0.0; /输入层数据 for(i=1;i=iInput;i+) mInput.r(i)=mSampleInput.r(iSample,i); /隐层数据 for(j=1;j=iHidden;j+) sum=0.0; for(i=1;i=iInput;i+) sum+=mInput.r(i)*mWeighti.r(i,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年如何应对烷基化工艺作业的面试挑战答案全解析
- 2025年建筑工程施工现场管理面试宝典与模拟题集
- 2025年软件开发工程师面试宝典知识点预测题
- 2025年物资储备仓库运输调度员职位面试高频词汇解析与答案
- 申诉业务知识培训课件
- 2025年中级炼油装置操作工技能考核大纲及样题解析
- 甲状腺超声TI-RADS分类课
- 脑卒中吞咽障碍护理
- 青少年普法宣传教育宣讲
- 单元统整教学课件模板
- 诊断学教学胸部查体
- 桥梁安全事故案例警示
- 育婴员理论模拟考试试题及答案
- 杨式85式太极拳现用图解
- YY/T 1095-2015肌电生物反馈仪
- SB/T 10460-2008商用电开水器
- GB/T 9124.1-2019钢制管法兰第1部分:PN系列
- GA 1800.2-2021电力系统治安反恐防范要求第2部分:火力发电企业
- 细胞生物学实验课件:细胞组分的分级分离
- 合理选择影像检查方法课件
- 欣旺集团种禽养殖管理制度手册
评论
0/150
提交评论