当前位置:   article > 正文

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

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

这里写图片描述

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

这里写图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/342680
推荐阅读
相关标签
  

闽ICP备14008679号