• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

AI机器学习(三)神经网络在图片上的应用(C#)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Deep Belief Network


Deep Belief Network Learning 2层神经网络的建模能力是非常强大的,但是要求隐节点个数足够多,多到难以接受。如果采用更深层的网络,比如3层网络,即两个hidden层,每层100个节点,则可以和hidden层有10000个节点的2层网络建模能力差不多,类似,4层网络,三个hidden层,每层100个节点,可以和hidden层有1000000个节点的2层网络建模能力差不多。这就是加深网络深度带来的好处。但是网络深了,针对3层网络的训练方法再用起来就会失败,因为参数的局部极小值太多了,很容易陷入到一个很烂的极值。

DBN的图像应用

计算机识别图像时,它看到的就是一个100010001二进制数据或者理解为一个矩阵。在此基础上我们可以将图片处理成RGB或者纯二值图(黑\白,1\0代表)。
比较简略的图像识别流程如下:
原图-缩放-二值化-特征比对-相似度-结论
采用了DBN方式的图像识别,首先是需要建立一个神经网络,利用隐藏层延伸神经元,通过已有的数据信息,像一个教师一样教机器学会判断格式化数据表述的是什么。
本章节将从一堆二值化(或灰度图)中的数字图像,进行神经网络学习数字,然后随意标画一个数字,查看图像识别准确率。着重讲解supervised learning(监督学习)。所用学习的图像,如下图:

程序功能说明

可以通过http://accord-framework.net/中的”Sample applications”,进入样例程序页面,找到“Deep Belief Networks and Boltzmann machies”.
完整地址:
https://github.com/accordnet/framework/tree/master/Samples/Neuro/Deep%20Learning

学习界面,如下图:

验证界面,如下图(大家画的时候尽量贴满整个格子,因为编码方面,按照窗口的图像缩放成32x32的图像,没有切割,所以大家画的数字,在画布上太小,识别不出来):

程序结构说明

演示程序是用WPF编程的,采用M-V-VM模式。基于数据绑定完成交互的(有别于Winform的事件启发,殊途同归)。

界面的对应关系如下:

代码分析-神经网络的数据准备

程序在启动后,会从资源文件optdigits-tra.txt中抽取图像数据,转化成Bitmap。Optdigits类负责数据的装载、转换、提取、存储等动作。

核心代码如下:

extractSample函数,将图像缩放到32X32,特征函数很简单如下:

代码分析-神经网络的监督学习

先以非监督学习学习一次,再勾选“Use supervised learning”监督学习,点击执行。

程序会实例化一个神经网络算法类,新建一个Teacher,从数据准备中调取数据,开始教主界面“MainViewModel. Network”这个“小孩子”学习。

老师可以不断的换,但孩子还是这个孩子。

代码分析-神经网络的学有所用

机器学习后,具备了识别图像的能力了,那我们就画个数字让它认一认。

程序通过WPF的一张画布控件“DrawingCanvas”,利用定时器定时提取特征(特征提取过程函数必须要与学习一致),将学习后的二值图(byte数组),送给“小孩子”认。

“小孩子”接到指令,开始认了:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#异步委托等待句柄的使用发布时间:2022-07-14
下一篇:
C#yield关键字的使用发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap