TensorFlow(四):手写数字识别
一:数据集
采用MNIST数据集:--》官网
数据集被分成两部分:60000行的训练数据集和10000行的测试数据集。
其中每一张图片包含28*28个像素,我们把这个数组展开成一个向量,长度为28*28=784.在MNIST训练数据集中mnist.train.images是一个形状为[60000,784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。图片里的某个像素的强度值介于0-1之间。
MNIST数据集的标签是介于0-9的数字,我们把便签转化为‘one-hot vectors’.一个one-hot向量除了某一位数字1以外,其余维度数字都是0.比如标签0将表示为([1,0,0,0,0,0,0,0,0,0,0]),标签3表示为([0,0,0,1,0,0,0,0,0,0]).所以标签相当于[60000,10]的数字矩阵。
我们的结果是0-9,我们的模型可能推测出一张图片是数字9的概率为80%,是数字8的概率为10%,然后其他数字的概率更小,总体概率加起来等于1.这相当于一个使用softmax回归模型的案例。
下面使用softmax模型来预测:
# MNIST数据集 手写数字
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data # 载入数据集,如果没有下载,程序会自动下载
mnist=input_data.read_data_sets('MNIST_data',one_hot=True)
# 每个批次的大小
batch_size=100
# 计算一共有多少个批次
n_batch=mnist.train.num_examples//batch_size # 定义两个placeholder
x=tf.placeholder(tf.float32,[None,784])
y=tf.placeholder(tf.float32,[None,10]) # 创建一个简单的神经网络
W=tf.Variable(tf.zeros([784,10]))
b=tf.Variable(tf.zeros([10]))
prediction=tf.nn.softmax(tf.matmul(x,W)+b) # 二次代价函数
loss=tf.reduce_mean(tf.square(y-prediction))
# 使用梯度下降法
train_step=tf.train.GradientDescentOptimizer(0.2).minimize(loss) # 初始化变量
init=tf.global_variables_initializer()
# 求最大值在哪个位置,结果存放在一个布尔值列表中
correct_prediction=tf.equal(tf.argmax(y,1),tf.arg_max(prediction,1))# argmax返回一维张量中最大值所在的位置
# 求准确率
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) # cast作用是将布尔值转换为浮点型。
with tf.Session() as sess:
sess.run(init)
for epoch in range(21): # 训练20次
for batch in range(n_batch): # 每次喂入一定的数据
batch_xs,batch_ys=mnist.train.next_batch(batch_size)
sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
#求准确率
acc=sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
print('Iter:'+str(epoch)+',Testing Accuracy:'+str(acc))
# 结果
# 可以看出每次训练准确率都在提高 Iter:0,Testing Accuracy:0.8301
Iter:1,Testing Accuracy:0.8706
Iter:2,Testing Accuracy:0.8811
Iter:3,Testing Accuracy:0.8883
Iter:4,Testing Accuracy:0.8943
Iter:5,Testing Accuracy:0.8966
Iter:6,Testing Accuracy:0.9002
Iter:7,Testing Accuracy:0.9017
Iter:8,Testing Accuracy:0.9043
Iter:9,Testing Accuracy:0.9052
Iter:10,Testing Accuracy:0.9061
Iter:11,Testing Accuracy:0.9071
Iter:12,Testing Accuracy:0.908
Iter:13,Testing Accuracy:0.9096
Iter:14,Testing Accuracy:0.9094
Iter:15,Testing Accuracy:0.9102
Iter:16,Testing Accuracy:0.9116
Iter:17,Testing Accuracy:0.9119
Iter:18,Testing Accuracy:0.9126
Iter:19,Testing Accuracy:0.9134
Iter:20,Testing Accuracy:0.9136
TensorFlow(四):手写数字识别的更多相关文章
- OpenCV+TensorFlow图片手写数字识别(附源码)
初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...
- TensorFlow 之 手写数字识别MNIST
官方文档: MNIST For ML Beginners - https://www.tensorflow.org/get_started/mnist/beginners Deep MNIST for ...
- Tensorflow实战 手写数字识别(Tensorboard可视化)
一.前言 为了更好的理解Neural Network,本文使用Tensorflow实现一个最简单的神经网络,然后使用MNIST数据集进行测试.同时使用Tensorboard对训练过程进行可视化,算是打 ...
- python-积卷神经网络全面理解-tensorflow实现手写数字识别
首先,关于神经网络,其实是一个结合很多知识点的一个算法,关于cnn(积卷神经网络)大家需要了解: 下面给出我之前总结的这两个知识点(基于吴恩达的机器学习) 代价函数: 代价函数 代价函数(Cost F ...
- TensorFlow——MNIST手写数字识别
MNIST手写数字识别 MNIST数据集介绍和下载:http://yann.lecun.com/exdb/mnist/ 一.数据集介绍: MNIST是一个入门级的计算机视觉数据集 下载下来的数据集 ...
- 【转】机器学习教程 十四-利用tensorflow做手写数字识别
模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...
- 100天搞定机器学习|day39 Tensorflow Keras手写数字识别
提示:建议先看day36-38的内容 TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edge ...
- Tensorflow 上手——手写数字识别
下面代码是Tensorflow入门教程中的代码,实现了一个softmax分类器. 第4行是将data文件夹下的mnist数据压缩包读取为tf使用的minibatch字典. 第6-11行定义了所用的变量 ...
- Softmax用于手写数字识别(Tensorflow实现)-个人理解
softmax函数的作用 对于分类方面,softmax函数的作用是从样本值计算得到该样本属于各个类别的概率大小.例如手写数字识别,softmax模型从给定的手写体图片像素值得出这张图片为数字0~9 ...
- 利用神经网络算法的C#手写数字识别
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...
随机推荐
- thrift原理与架构
是什么: 一个RPC框架.
- VS.NET(C#)--2.6_ASP.NET服务器控件层次结构
ASP.NET服务器控件层次结构 语法 <asp:ControlType Id="ControlID" Rubat="Server" Property=& ...
- .NET调用腾讯云API实例
最近项目有用到腾讯云的身份识别接口,话不多说,直接上代码: private void IDCardVerification(HttpContext context) { string imgStr = ...
- 《图解HTTP》读后总结
阅读时间:2019.10.30-2019.11.6 阅读心得: 从知乎上看到有人推荐这本书,本身对计算机网络方面学习的比较少,于是就买来这本书开始看.这本书总体看下来比较轻松,因为书中的插画非常卡通, ...
- EntityFramework进阶(四)- 实现批量新增
本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 我们可以结合Ado.Net的SqlBulkCopy实现SqlServer数据库的批量新增,其他类型的数据库的批量 ...
- mysql(单表查询,多表查询,MySQl创建用户和授权,可视化工具Navicat的使用)
单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT ...
- java - day017 - 线程
进程 操作系统中, 并行执行的任务 线程 进程内部, 并行执行的任务 进程包含线程 线程的创建 继承Thred 定义 Thred 的子类 重写 run() 方法 在 run() 方法中的代码, 是与其 ...
- SUSE SLES15SP1 高可用(HA)- 快速安装和设置
- kvm虚拟化环境的搭建
首先搭建kvm的虚拟化环境,我选择的环境是在vmvare上的Centos 7的虚拟机,在该环境上搭建kvm的虚拟化环境 1:安装虚拟机(该过程自行安装) 2:操作系统环境的设置 (1)修改内核模式为兼 ...
- EntityFramework 事物引发的问题
前记 还是最近做的日志模块,今天做最后的入库工作.在测试入库日志记录时,总是出现怪异的问题. 开启服务开始接收 Kafka 的消息,第一条数据没有问题,后面的都如不了库.很是懵~~~ 调试了很久定位在 ...