python用TensorFlow做图像识别的实现


Posted in Python onApril 21, 2020

一、TensorFlow简介

TensorFlow是由谷歌开发的一套机器学习的工具,使用方法很简单,只需要输入训练数据位置,设定参数和优化方法等,TensorFlow就可以将优化结果显示出来,节省了很大量的编程时间,TensorFlow的功能很多很强大,这边挑选了一个比较简单实现的方法,就是利用TensorFlow的逻辑回归算法对数据库中的手写数字做识别,让机器找出规律,然后再导入新的数字让机器识别。

二、流程介绍

python用TensorFlow做图像识别的实现

上图是TensorFlow的流程,可以看到一开始要先将参数初始化,然后导入训练数据,计算偏差,然后修正参数,再导入新的训练数据,不断重复,当数据量越大,理论上参数就会越准确,不过也要注意不可训练过度。

三、导入数据

数据可进入MNIST数据库 (Mixed National Institute of Standards and Technology database),这是一个开放的数据库,里面有许多免费的训练数据可以提供下载,这次我们要下载的是手写的阿拉伯数字,为什么要阿拉伯数字呢?1、因为结果少,只有十个,比较好训练 2、图片的容量小,不占空间,下面是部分的训练数据案例

python用TensorFlow做图像识别的实现

TensorFlow可以直接下载MNIST上的训练数据,并将它导入使用,下面为导入数据的代码

from tensorflow.examples.tutorials.mnist import input_data
MNIST = input_data.read_data_sets("/data/mnist", one_hot=True)

四、设定参数

接下来就是在TensorFlow里设定逻辑回归的参数,我们知道回归的公式为Y=w*X+b,X为输入,Y为计算结果,w为权重参数,b为修正参数,其中w和b就是我们要训练修正的参数,但训练里要怎么判断计算结果好坏呢?就是要判断计算出来的Y和实际的Y损失值(loss)是多少,并尽量减少loss,这边我们使用softmax函数来计算,softmax函数在计算多类别分类上的表现比较好,有兴趣可以百度一下,这边就不展开说明了,下面为参数设定

X = tf.placeholder(tf.float32, [batch_size, 784], name="image")
Y = tf.placeholder(tf.float32, [batch_size, 10], name="label")

X为输入的图片,图片大小为784K,Y为实际结果,总共有十个结果(数字0-9)

w = tf.Variable(tf.random_normal(shape=[784, 10], stddev=0.01), name="weights")
b = tf.Variable(tf.zeros([1, 10]), name="bias")

w初始值为一个随机的变数,标准差为0.01,b初始值为0。

logits = tf.matmul(X, w) + b
entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y)
loss = tf.reduce_sum(entropy)

TensorFlow里面已经有softmax的函数,只要把他叫出来就可以使用。

optimizer =
tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init)
  n_batches = int(MNIST.train.num_examples/batch_size)
  for i in range(n_epochs): # train the model n_epochs times
    for _ in range(n_batches):
      X_batch, Y_batch = MNIST.train.next_batch(batch_size)
      sess.run([optimizer, loss], feed_dict={X: X_batch, Y:Y_batch})

接着就是设定优化方式,这边是使用梯度降下发,然后将参数初始化,接着就运行了,这边要提一下,我们的训练方式是每次从训练数据里面抓取一个batch的数据,然后进行计算,这样可以预防过度训练,也比较可以进行事后的验证,运行完后再用下面的代码进行验证

n_batches = int(MNIST.test.num_examples/batch_size)
  total_correct_preds = 0
  for i in range(n_batches):
    X_batch, Y_batch = MNIST.test.next_batch(batch_size)
    _, loss_batch, logits_batch = sess.run([optimizer, loss, logits],
    feed_dict={X: X_batch, Y:Y_batch})
    preds = tf.nn.softmax(logits_batch)
    correct_preds = tf.equal(tf.argmax(preds, 1), tf.argmax(Y_batch, 1))
    accuracy = tf.reduce_sum(tf.cast(correct_preds, tf.float32))
    total_correct_preds += sess.run(accuracy)
  print ("Accuracy {0}".format(total_correct_preds/MNIST.test.num_examples))

最后shell跑出来的结果是0.916,虽然看上去还算是不错的结果,但其实准确率是很低的,因为他验证的方式是判断一个图片是否为某个数字(单输出),所以假如机器随便猜也会有0.82左右的命中几率(0.9*0.9+0.1*0.1),想要更准确的话目前想到有两个方向,一个是提高训练量和增加神经网络的层数。

到此这篇关于python用TensorFlow做图像识别的实现的文章就介绍到这了,更多相关TensorFlow 图像识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 截取 取出一部分的字符串方法
Mar 01 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
基于python实现计算两组数据P值
Jul 10 Python
python中字符串的编码与解码详析
Dec 03 Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 #Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 #Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 #Python
Django实现celery定时任务过程解析
Apr 21 #Python
使用PyQt5实现图片查看器的示例代码
Apr 21 #Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 #Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 #Python
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
php 8小时时间差的解决方法小结
2009/12/22 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
Javascript面向对象编程
2012/03/18 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
Python冒泡排序注意要点实例详解
2016/09/09 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python中整数的缓存机制讲解
2019/02/16 Python
python django生成迁移文件的实例
2019/08/31 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
服务行业个人求职的自我评价
2013/12/12 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
同学聚会策划方案
2014/06/06 职场文书
应届大专生求职信
2014/06/26 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
结婚保证书
2015/01/16 职场文书
国博复兴之路观后感
2015/06/02 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL