赞
踩
Deep Belief Network Learning 2层神经网络的建模能力是非常强大的,但是要求隐节点个数足够多,多到难以接受。如果采用更深层的网络,比如3层网络,即两个hidden层,每层100个节点,则可以和hidden层有10000个节点的2层网络建模能力差不多,类似,4层网络,三个hidden层,每层100个节点,可以和hidden层有1000000个节点的2层网络建模能力差不多。这就是加深网络深度带来的好处。但是网络深了,针对3层网络的训练方法再用起来就会失败,因为参数的局部极小值太多了,很容易陷入到一个很烂的极值。
计算机识别图像时,它看到的就是一个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数组),送给“小孩子”认。
“小孩子”接到指令,开始认了:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。