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

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数组),送给“小孩子”认。

这里写图片描述

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

这里写图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值