时间:2014-11-04 来源:

BP神经网络的C代码分析 【移动开发】

去年在学习Stanford的ML课程的时候整理过一篇BP神经网络原理的解析承接网站前端,链接地址,承接网站前端不过没有对它的code实现作太多的研究,html切图报价只是用MATLAB的工具箱做了实验.

// 一维数组空间分配 double *alloc_1d_dbl(int n) { double *newA; newA = (double *) malloc ((unsigned) (n * sizeof (double))); if (newA == NULL) { printf("ALLOC_1D_DBL: Couldn't allocate array of doubles\n"); return (NULL); } return (newA); } // 二维数组空间分配 double **alloc_2d_dbl(int m, double **conn, int n2) { double sum; int j, double *target, int nj, t, int nh, int no, double *hidden, k; double h, errsum; errsum = 0.0; for (j = 1; j <= nh; j++) { h = hidden[j]; sum = 0.0; for (k = 1; k <= no; k++) { sum += delta_o[k] * who[j][k]; } delta_h[j] = h * (1.0 - h) * sum; errsum += ABS(delta_h[j]); } *err = errsum; } void bpnn_adjust_weights(double *delta, double *ly, double **w, double eta, j; ly[0] = 1.0; for (j = 1; j <= ndelta; j++) { for (k = 0; k <= nly; k++) { new_dw = ((eta * delta[j] * ly[k]) + (momentum * oldw[k][j])); w[k][j] += new_dw; oldw[k][j] = new_dw; } } } void bpnn_feedforward(BPNN *net) { int in, out; in = net->input_n; hid = net->hidden_n; out = net->output_n; bpnn_layerforward(net->input_units, net->input_weights, hid); bpnn_layerforward(net->hidden_units, net->hidden_weights, out); } 到现在为止psd切图html,BPNN的主要函数算是介绍完毕了.

本文地址:http://blog.csdn.net/linj_m/article/details/40679085

要开始具体编写BP神经网络(以下简称BPNN)的步骤之前,psd切图html你需要定义好BPNN的结构web外包,这里面用结构体实现,div切图排版自然你完全可以用类实现.

typedef struct { int input_n; // 网络输入个数 int hidden_n; // 隐藏层单元个数 int output_n; // 网络输出个数 double *input_units; // 网络输入单元 double *hidden_units; // 隐藏层单元 double *output_units; // 网络输出单元 double *hidden_delta; // 隐藏层单元error double *output_delta; // 网络输出单元error double *target; // 目标输出单元 double **input_weights; // 从输入层到隐藏层的权值向量 double **hidden_weights; // 从隐藏层到输出层的权值向量 // 冲量项 double **input_prev_weights; // 从输入层到隐藏层的冲量项向量 double **hidden_prev_weights; // 从隐藏层到输出层的冲量项向量 } BPNN; 创建BPNN

[3] 计算机程序设计艺术(卷2)  Chapter 3 Random Numbers 

从上面的算法流程可以看出来网页切图制作,BP神经网络的步骤并不多,网页切图制作如果你之前就了解BP神经网络div+css+js切图,那么上面的流程应该还是可以很顺利地看懂的,div+css+js切图如果之前没学习过承接网站前端,那么我推荐你好好参看我上面推荐的两个Ref.

BPNN的结构体

Jeremy Lin

在讲如何创建网络之前,页面div重构我更愿意谈谈如何生成随机数.嘿psd切图html,当然是用这个函数web外包,但是,手机网页制作我们可以花点时间谈下rand()是如何生成随机数.在Meitu实习的末尾网页切图制作,我突然想了解随机数到底是如何生成的.那时候我第一步是自然是Google了,div页面结果搜索关键词不够cool,得到的结果自然是用rand()生成了,div+css+js切图哈承接网站前端,可是我想要的是随机数生成的原理啊.当然,承接网站前端最后知道了psd切图html,那就是用线性同余法生成随机数.大家如果如果有兴趣的话,承接网页制作可以参考我提供的Refs[3], int n_hidden, n_hidden + 1); newnet->hidden_weights = alloc_2d_dbl(n_hidden + 1, n_hidden + 1); newnet->hidden_prev_weights = alloc_2d_dbl(n_hidden + 1, int m, j; for (i = 0; i <= m; i++) { for (j = 0; j <= n; j++) { w[i][j] = dpn1(); } } }

在上面的算法流程中的第一步是创建n_in个输入web外包,n_hidden个隐藏层单元,div切图排版n_out个输出单元的网络.然后是初始化网络的权值为较小的随机数.

不过网页切图制作,还有一个东西还没说,网页切图制作那就是所谓的终止条件.从推导BP的过程来说div+css+js切图,我们很容易想到的一种终止条件自然是:直到对训练样例的误差E降低到某个预定义的阈值之下.但是,div+css+js切图这其实并不是一个好的想法承接网站前端,因为BP算法容易过度拟合训练样例,页面div重构降低对于其他实例的泛化精度.而为解决这个问题一个最常用的方法是在训练数据外再为算法提供一个验证数据集(validation dataset).算法在使用训练数据集合驱动梯度下降搜索的同时psd切图html,监视对于这个验证数据集合的误差.

BPNN的训练

好了,psd切图html前戏已做web外包, double eta, double *eo, hid, hid_err; in = net->input_n; hid = net->hidden_n; out = net->output_n; // 前向传播 bpnn_layerforward(net->input_units, net->input_weights, hid); bpnn_layerforward(net->hidden_units, net->hidden_weights, out); // 计算误差 bpnn_output_error(net->output_delta, net->output_units, &out_err); bpnn_hidden_error(net->hidden_delta, net->output_delta, net->hidden_weights, &hid_err); *eo = out_err; *eh = hid_err; // 调整权值向量 bpnn_adjust_weights(net->output_delta, net->hidden_units, net->hidden_weights, eta, hid, in, net->input_prev_weights, momentum); } 下面是上面各个函数的具体实现:

[1] BP神经网络解析          地址

现在进入原题:

BPNN *bpnn_create(int n_in, int n_out) { // 创建BPNN BPNN *newnet; newnet = bpnn_internal_create(n_in, n_out); // 初始化BPNN的网络权值 bpnn_randomize_weights(newnet->input_weights, n_hidden); bpnn_randomize_weights(newnet->hidden_weights, n_out); // 初始化BPNN的冲量 bpnn_zero_weights(newnet->input_prev_weights, n_hidden); bpnn_zero_weights(newnet->hidden_prev_weights, n_out); return (newnet); } 在这里网页切图制作,我们主要使用bpnn_internal_create()函数创建BPNN:

[2] Tom M.Mitchell 机器学习教程  地址

更加资源请 关注 博客:LinJM-机器视觉微博:林建民-机器视觉

点击次数:7294
作者:
web前端行业资讯
Web new NewsList
Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日苹果经典电脑Lisa源代码修复完成将于2018年开源 ,,2017年12月28日腾讯浏览指数发布年终榜单2017年人们都关注哪些AI话题? ,,2017年12月28日除了发现开普勒90,NASA还靠AI做了什么? ,,2017年12月28日柯洁宣布:明年4月,将再次与围棋AI交锋 ,,2017年12月28日百度无人车美国首秀CES将发布Apollo2.0 ,,2017年12月28日这四种技术发展趋势将在2018年改变世界 ,,2017年12月28日2017:谷歌DeepMind团队的年度回顾 ,,2017年12月28日封杀这个公式,AI智商将为零 ,,2017年12月28日微软AI高管:要让所有人、所有机构都用上人工智能 ,,2017年12月28日为什么Linux桌面年一直未到来 ,,2017年12月28日AppleLisa操作系统将开源 ,,2017年12月28日2018年9大技术趋势预测 ,,2017年12月28日谷歌研究院发布NIMA:能评价图像有多美,还能让图像变得更美 ,,2017年12月28日苹果为2019年iPhone开发大容量电池新技术 ,,2017年12月28日谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日MySQL之——servicemysqlstart出错,mysql启动不了,解决mysql:unrecognizedservice错误(插曲) 【编程语言】2015年05月28日IPC——FIFO 【综合】2015年05月25日hdu5306GorgeousSequence【移动开发】2015年07月28日HDU5195线段树【系统运维】2015年03月30日linux删除一行中的前几个字符【综合】2015年03月03日注钻桩啄鬃赚缀砖姿醉酌装茁 【编程语言】2015年01月26日【CTSC1999】拯救大兵瑞恩(孤岛营救问题) 【编程语言】2015年04月24日轻松实现Android更换皮肤(主题)【移动开发】2015年01月07日战斗游戏BattleforWesnoth1.9.13aka1.10-beta4发布 ,,2016年06月23日#leetcode#ValidPalindrome 【综合】2015年07月23日动态链接 【编程语言】2015年04月07日window环境下amr转MP3 【编程语言】2015年05月27日九度OJ—题目1073:杨辉三角形 【编程语言】2014年12月25日CentOS下载安装playonlinux【互联网】2014年11月27日初步学习:VO,BO和PO【云计算】2015年07月28日emacsorg-reveal创建网页版presentation 【Web前端】2015年07月30日Android开发之实现图片自动滚动显示标签的ViewPager 【数据库】2014年12月22日MyBatis日期用法技巧 【编程语言】2015年05月13日ExcelIF函数应用教程2014年01月28日Linux 适合你吗?(一)2014年01月29日hdu4505 【综合】2015年08月31日oracle中casewhen的使用【编程语言】2015年05月05日Failedtoinitializestoragemodule:user的解决方案【移动开发】2015年08月07日如何利用phparray_multisort函数对数据库结果进行复杂排序2014年01月29日使用Json比用string返回数据更友好,也更面向对象一些2014年01月29日android音乐播放器源码 【移动开发】2015年05月25日NSXMLParser(SAX解析)大文件解析 【编程语言】2014年12月11日关于nginx+php5.3.8+eclipse3.7工作空间的配置方法2014年01月29日JSprototype 【系统运维】2015年05月11日小三角的做法与使用2014年01月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)