




已阅读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吉林大学白求恩第一医院中医科医生招聘1人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025年宿州市人才集团有限公司招募就业见习人员7人模拟试卷及答案详解(考点梳理)
- 2025广东省连州市赴高校设点面向社会招聘编制教师37人模拟试卷附答案详解(模拟题)
- 2025年芜湖市残疾人综合服务中心编外工作人员招聘2人模拟试卷及参考答案详解1套
- 2025湖南新宁县事业单位和县属国有企业人才引进降低开考比例岗位模拟试卷及答案详解(名师系列)
- 2025年中国花园长柄锄头行业市场分析及投资价值评估前景预测报告
- 2025海南儋州市职业化社区工作者招聘拟聘(六)考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025广西柳州市鱼峰区花岭社区卫生服务中心招聘编外合同制人员2人考前自测高频考点模拟试题及答案详解1套
- 2025广东广州医科大学校本部第二次招聘9人考前自测高频考点模拟试题附答案详解
- 2025北京市海淀区教师进修学校附属实验学校教育集团招聘考前自测高频考点模拟试题及答案详解(历年真题)
- 发育生物学实验教案
- 低压电工试题库-含答案
- 【幼儿自主游戏中科学探究活动实践研究文献综述1900字】
- 肝脓肿的诊断和治疗
- YY 9706.102-2021医用电气设备第1-2部分:基本安全和基本性能的通用要求并列标准:电磁兼容要求和试验
- GB 7691-2003涂装作业安全规程安全管理通则
- 危险化学品双重预防机制培训课件
- 跌倒坠床原因分析预防措施
- 湖南人民出版社乘槎笔记(斌椿)
- Q∕SY 1452.1-2012 石油装备产品包装规范 第1部分:钻机和修井机
- 妇产科产前诊断技术服务临床医师考核题(附答案)
评论
0/150
提交评论