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 相关文章推荐
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
浅谈python中set使用
Jun 30 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python爬虫实战之最简单的网页爬虫教程
Aug 13 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
python 对key为时间的dict排序方法
Oct 17 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
python Paramiko使用示例
Sep 21 Python
Python数据可视化常用4大绘图库原理详解
Oct 23 Python
Python提取PDF指定内容并生成新文件
Jun 09 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
Yii实现简单分页的方法
2016/04/29 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
python实现随机漫步方法和原理
2019/06/10 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
小学安全教育材料
2014/02/17 职场文书
励志演讲稿范文
2014/04/29 职场文书
建议书格式
2015/02/04 职场文书
2016公司年会通知范文
2015/04/25 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript