Steven Wang's Blog
C'est la vie
rss
email
twitter
新浪微博
  • Home
  • About
  • Google Profile
  • 新浪微博

利用Autoassociative Memory(联想记忆)进行数字识别

0 Comments
Posted on 十一月 14 2009

一、理论基础

对数字识别的方法有很多,本文从人工神经网络的角度出发,介绍一种数字识别的方法。人工神经网络中的Hopfield网是一种回馈型网络,其通过网络神经元状态的变迁而最终稳定于平衡状态,并且这种网络具有联想记忆(Autoassociative Memory)能力,能够从某一残缺的信息回忆起所属的完整的记忆信息,这为数字识别奠定了理论基础。

在数字识别中,将规范的阿拉伯数字(0到9)视为网络中的各个神经元,当其到达稳定状态后,对于一个不规范的数字的输入,网络可以根据输入进行联想记忆,记忆的结果即可视为识别的结果。

具体的操作步骤可以如下:利用Hebbian理论进行网络学习,可得到一个网络权值矩阵w,最后,将输入s与w进行联想记忆操作。

二、具体实现

本文在MFC中实现了对数字"0","1","2"的识别,程序运行结果如下图所示:(文章的末尾提供了源代码下载)

AutoassociativeMemory-程序运行结果

所有的样本和输入输出,都是在一个6*5的网格内进行的,如果一个Cell被填充了黑色,则该Cell的值为-1,返之为1,因此,可以将一个阿拉伯数字的信息数字化为一个1*30的矩阵。界面上方的网格显示了"0","1","2"这三个样本的表示,左下方的网格接收输入(通过鼠标点击或滑动来填充颜色),点击"Recognize"按钮后,识别的结果在右下方的网格内显示。点击"Clear"按钮,则清除输入与输出,准备下一次识别。在上图中,虽然输入了一个不完整、且含有若干噪声点的数字"2",但最后还是输出了一个完整的数字"2"。

程序的关键部分是网格的绘制和矩阵运算。网格对象包括了起始坐标、行高、列宽、行数、列数等属性,以及绘制、填充、数字化等操作,将这些封装到一个类里,有效的提高了程序的可读性和可扩展性。如:为了提高精度,需要将数字显示在一个60*50的网格内时,只须修改相关参数即可。本例中数字的表示是一个1*30的矩阵,w是一个30*30的矩阵,而计算w时需要用到矩阵的乘法、加法、转置操作,下面是矩阵运算的C++关键代码:

//矩阵的乘法运算
int** Matrix::Multiply(int **a, int **b, int ra, int ca, int rb, int cb)
{
	if(ca != rb)
	{
		return NULL;
	}

	int **result = new int*[ra];
	int i, j, k, sum;
	for(i = 0;i < ra;i++)
	{
		result[i] = new int[cb];
		for(j = 0;j < cb;j++)
		{
			sum = a[i][0] * b[0][j];
			for(k = 1;k < ca;k++)
			{
				sum += a[i][k] * b[k][j];
			}
			result[i][j] = sum;
		}
	}
	
	return result;
}

//矩阵的加法运算
int** Matrix::Addition(int **a, int **b, int ra, int ca, int rb, int cb)
{
	if(ra != rb || ca != cb)
	{
		return NULL;
	}

	int **result = new int*[ra];
	int i, j;
	for(i = 0;i < ra;i++)
	{
		result[i] = new int[ca];
		for(j = 0;j < cb;j++)
		{
			result[i][j] = a[i][j] + b[i][j];
		}
	}
	return result;
}

//矩阵的转置运算
int** Matrix::Transpose(int **a, int ra, int ca)
{
	int tmp, i, j;
	tmp = ra;
	ra = ca;
	ca = tmp;
	int** result = new int*[ra];
	for(i = 0;i < ra;i++)
	{
		result[i] = new int[ca];
		for(j = 0;j < ca;j++)
		{
			result[i][j] = a[j][i];
		}
	}
	return result;
}

本程序可以扩展成样本由用户输入的模式,这样会使程序更加灵活。本程序也只是一个数字识别的最简单实现,存在很多识别不准确的情况,可以利用更多的理论知识对算法进行改进,提高识别的准确度。当然,Autoassociative Memory还可以用在数识别以外的很多领域,如:考古中对模糊文字的识别、车牌字母和数字的识别,本文只是起到一个抛砖引玉的作用,介绍的深度和广度都还不够。

Resources & Reference:
1、Autoassociative Memory.pdf
2、Supervised Hebbian Learning.pdf
3、何建华-神经网络讲义-part5-Hopfield网络.ppt
4、数字识别MFC源代码下载

--End--
作者:Steven Wang | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://blog.stevenwang.name/AutoassociativeMemory-NumberRecognize-13004.html

Relate Posts:

  • 最近项目的一点总结
  • 利用BP网络算法进行数字识别的困惑
  • 利用LMS(最小均方误差)算法进行数字识别
  • 产生式规则识别动物在MFC中的实现
  • 简单的四连通种子填充法在MFC中的实现

Tags: Autoassociative Memory  Hopfield  联想记忆  数字识别  矩阵运算  MFC 
Categories: 人工神经网络 

Leave a Reply



About Me

    Steven Wang
    Student in Computer Software and Theory
    Life@Wuxi, Jiangsu
    Study@Jiangnan University
    more...

Feeds

  • Entries (RSS)
  • Comments (RSS)
  • 订阅到 Google Reader
  • 订阅到 抓虾
  • 订阅到 鲜果
  • 订阅到 QQ

Popular Posts

  • 围着脖子推GTalk机器人V1.0发布(27299)
  • 通过SSH + Chrome + Proxy Switchy!代理上网(19678)
  • 在GAE上部署Micolog博客系统(11307)
  • 围着脖子推V2.0 Beta1版发布 支持Twitter,新浪微博,人人网,嘀咕,做啥 同步更新(11060)
  • 围着脖子推GTalk机器人V1.0更新-增加接收Twitter更新等功能(10663)
  • 围着脖子推更新-增加同步更新网易微博、腾讯微博和搜狐微博(10483)
  • 在Matlab中实现Hough变换检测直线(8448)
  • Micolog主题(theme) —— translucence(7842)

Recent Posts

  • Steven Wang's 2011
  • 工作
  • T400升级Intel SSD
  • Java中的时区转换小结
  • 二值图像连通区标记之区域生长法
  • Steven Wang's 2010
  • 微博提醒应用上线
  • 双喜临门

Recent Comments

  • Queen:加油。...
  • Queen:hi,我来打个招呼,深圳的朋友。...
  • yu :@Steven Wang, p<...
  • ixwebhosting:文章总结的好潇洒,即将对末来学生生活说声...
  • john:希望新的一年更加美好...

Categories

  • Google App Engine(10)
  • 数字图像处理(11)
  • Micolog(7)
  • VPS(6)
  • 围着脖子推(15)
  • 人工神经网络(5)
  • 算法(11)
  • MyLife(16)
  • 媒体检索(4)
  • Others(8)
  • Python(2)

Archives

  • January 2012(1)
  • December 2011(2)
  • May 2011(1)
  • February 2011(1)
  • December 2010(3)
  • November 2010(1)
  • October 2010(1)
  • September 2010(4)
  • August 2010(2)
  • July 2010(5)
  • June 2010(4)
  • May 2010(7)

Blog roll

  • ~Issue
  • Fenng
  • 刘未鹏 | Mind Hacks
  • 林海听松
  • Yu Zheng
  • Johnny Han
  • 静静的安静
  • Dbger
  • land of promise
  • 星星
  • ISHENS|TECH
  • 天天软件园
  • leezhenchong's blog
  • 苏洋博客

  • Home
  • About
  • Google Profile
  • Twitter
  • 新浪微博
  • Login
Powered by Google App Engine  |   Designed by WebTreats  |   由 xuming 提供 Micolog程序