BP网络练习(二)
来源:互联网 发布:linux磁盘的大小 编辑:程序博客网 时间:2024/05/18 02:42
上次用MATLAB做的,这次尝试用C写了下,有待改进!
#include <stdio.h>#include <math.h>double daoshu(double p)//求导数函数{double d;d = 1/p;return d;}int main(int argc,char argv[]){int n;double P[10] = {4,11,23,34,47,58,62,71,89,97},D[10],OUT[10];//10个样本for(n=0;n<10;n++)//目标结果:D=1/P{D[n] = daoshu(P[n]);}double w11 = 1,w12 = 1,w13 = 1,w21 = 1,w22 = 1,w23 = 1;//初始权值double v11,v12,v13,v2,y1,y2,y3,O;//加权和v,各层输出y,Oint T = 0, epoch = 0;//周期T,输入样本次数epochdouble E = 0,Ee = 0,e = 0;//平均方差E,方差edouble Eta = 0.5,Delta11,Delta12,Delta13,Delta2;//步长Eta,梯度Deltawhile(epoch==0||(0.5*0.1*Ee>0.00001&&T<200))//开始训练;误差较大继续训练,周期较少继续训练{Ee = 0;//误差和归零for(n=0;n<10;n++){//隐层加权求和v11 = w11*P[n]; v12 = w12*P[n];v13 = w13*P[n];//隐层输出y1 = 1/(exp(-v11)+1);y2 = 1/(exp(-v12)+1);y3 = 1/(exp(-v13)+1);//输出层加权求和v2 = w21*y1+w22*y2+w23*y3;//输出层输出O = 1/(exp(-v2)+1);//输出层误差e = D[n]-O;//样本方差累计Ee = Ee+0.5*pow(e,2);//输出层梯度Delta2 = e*O*(1-O);//输出层权值更新w21 = w21+Eta*Delta2*y1;w22 = w22+Eta*Delta2*y2;w23 = w23+Eta*Delta2*y3;//隐层梯度Delta11 = y1*(1-y1)*(Delta2*(w21+w22+w23));Delta12 = y2*(1-y2)*(Delta2*(w21+w22+w23));Delta13 = y3*(1-y3)*(Delta2*(w21+w22+w23));//隐层权值更新w11 = w11+Eta*Delta11*P[n];w12 = w12+Eta*Delta12*P[n];w13 = w13+Eta*Delta13*P[n];//样本输入数加一epoch++;}//周期数加一T++;//平均方差E = 0.5*0.1*Ee;if(T<200)printf("T = %d;E = %f\n",T,E);}//输出训练结果printf("E = %e\n epoch = %d T = %d\n w11 = %f w12 = %f w13 = %f w21 = %f w22 = %f w23 = %f\n\n",E,epoch,T,w11,w12,w13,w21,w22,w23);//仿真样本double Q[10] = {5,10,20,30,40,50,60,70,80,90};for(n=0;n<10;n++){D[n] = daoshu(Q[n]);}printf("Q: ");for(n=0;n<10;n++){printf("%f ",Q[n]);}printf("\n\n");//目标结果printf("D: ");for(n=0;n<10;n++){printf("%f ",D[n]);}printf("\n\n");//仿真for(n=0;n<10;n++){v11 = w11*P[n]; v12 = w12*P[n];y1 = 1/(exp(-v11)+1);y2 = 1/(exp(-v12)+1);v2 = w21*y1+w22*y2;OUT[n] = 1/(exp(-v2)+1);}//仿真结果printf("O: ");for(n=0;n<10;n++){printf("%f ",OUT[n]);}printf("\n");getchar();}
- BP网络练习(二)
- BP网络练习
- BP网络
- BP网络
- BP网络
- BP网络
- 反向传播网络(BP 网络)
- 机器学习----神经网络(二)BP算法
- 神经网络的基本知识(五):前向网络:BP网络
- BP网络JAVA版
- bp网络训练演示
- bp网络实现预测
- bp网络参数说明
- BP网络的设计
- BP网络主要用于
- Bp网络神经算法
- BP网络范例 MATLAB
- BP网络-数字识别
- 互联网公司:智能手机赌未来
- sql server 2008 copy data from one table to another
- vs2010编译qbittorrent
- 程序员的生活啊
- ViewPager多页面滑动切换以及动画效果
- BP网络练习(二)
- 2410下MMU介绍
- OK6410Android系统的开机默认设置
- xml网站计数器和用在global文件中写的网站日志文件
- Virtual BOX OSE to Virtual BOX
- 各种nosql数据库的比较Cassandra,MongoDB,CouchDB,Redis,Riak,HBase
- oracle服务启动关闭脚本
- 为Tiny6410Android2.3.4系统添加Ethernet框架支持(含去除状态栏信号图标及增加屏幕超时“永不关屏”选项)
- IPHONE开发