基于tensorflow框架,自己实现一个最基础手写识别程序

周末闭关两日,做了一个手写识别数字的程序。

夫人很气愤,浪费两天时间,搞出这么个破东西,十几年前的触屏手机就具备了手写输入功能,拿过来用不就可以?做这个有什么价值?

是的,很多第三方服务,接入很便捷,识别率也很高。但是那毕竟是别人家的。

豪宅豪车是不错,而我们租来只能使用,没有能力和胆量按照自己的想法去重新装修和改造。

然而,自己家的就不一样。你写一个4,我可以让他显示“郭敬明”,乐趣在此。

结合当下比较火的机器学习。

实现方式如下:

首先,要训练电脑认识手写体,所以找来很多例子。



这里面有65000多张手写体图片(图片来源于mnist),每张图片名称“_”后边的是它的数字值。然后,这些要交给机器去学习,图片有了,答案有了,机器会去找规律。

机器学习中有一个比较笨的方法,叫回归模型。

在这个例子中,它是这样运作的,比如下面这张图片,这是1的手写体图片。

我们把这个图片通过技术手段,按照一个个像素点搞成矩阵x,空白就是0,有颜色的有值,就像上面那样。

我们假设,有这么一个公式(这个公式将最终计算图片得出数字):这个图片矩阵x和另一个矩阵W相乘,然后再加上一个数b,就会得出一个值,这个值就是我们的答案y。

所以,我们把65000张图片x传入公式中,让他自己去算,未知数就两个,一个W和一个b。因为矩阵x对应的值是图片的像素点,所以这个图片一般都会小到不能再小。这次我们的手写体数字是28*28像素。

好的,经过机器的求解。我们终于算出来了W和b的值,这个值要保存起来,下一次可以直接使用。

y = Wx + b 

也就是说,如果再有一个图片,我们只需要把它转换为矩阵,然后输入到公式中,经过计算,我们就知道y的结果了,也就是知道了这个图片表达的是数字几。

至此,这个简单的程序就做完了。

再来回顾一下效果:

这是使用的最简单的基于Softmax回归的全连接神经网络。

当然,相比于卷积神经网络,它的识别率很低。

但是,它很容易理解,就像Hello World,容易理解。

总结:

一、用到的知识

1、谷歌开源的机器学习框架TensorFlow的使用,矩阵运算,图的持久化保存。

2、python的GUI界面知识,PIL的图形处理。

3、机器学习的流程和概念,前向传播算法,损失函数,学习率。

4、数学知识,矩阵,交叉熵。
 

二、感悟和思考

1、全连接神经网络的回归模型,有点像全体民主。

因为参数太多,会导致计算变慢;又因为要考虑每个人的感受,会出现过拟合的现象。

简单来说,就是因为照顾几个特例,导致大局无法形成有规律的模型。
要是为了照顾几个特例,从而形成一个的公式,那么其他主流数据又不适用这个规则了。

所以,需要从大局出发,抛弃这些特例,或者忽略他们的一些次要信息,就像只看一个人的优点。

据说卷积神经网络可以解决这个问题,它不是考虑每一个参数,它只把抽取出的主要特征作为判断依据,有点像核心成员决策。

2、行业的知识是共通的。

在此之前没有接触过python这个编程语言,下载了个电子书,看了一下他的语法,什么叫if,哪个叫Button,很多命名居然都是一样的,很快就能上手。

所以,不必着急去学习语言1,语言2,语言3,每一大类语言(前端、后端这算不同种类,Java、C也算不同种类)学好一个,其他的会很快上手。

代码已上传,可到我下载主页查看,只需要5积分,便可下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值