Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow实现Softmax Regression识别手写数字

【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow实现Softmax Regression识别手写数字

作者头像
石瞳禅
发布于 2018-09-18 10:05:01
发布于 2018-09-18 10:05:01
44700
代码可运行
举报
运行总次数:0
代码可运行

3.2 TensorFlow实现Softmax Regression识别手写数字

MNIST(Mixed National Institute of Standards and Technology database)是一个非常简单的机器视觉数据集,它由几万张28像素x28像素的只包含灰度值的手写数字组成。机器学习领域,对MNIST手写数字的识别就像是编程语言里实现Hello World例子一样,是入门知识。

首先加载MNIST数据,然后查看mnist这个数据集,可以看到训练集有55000个样本,测试集有10000个样本,同时验证集有5000个样本。每一个MNIST数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签label。下面的程序中,mnist.train.images就是训练数据集的图片,mnist.train.labels就是训练数据集的标签。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)

每一张图片是28像素x28像素大小的灰度图片,图像中白色的像素可以用0表示,有颜色的地方根据颜色深浅有0到1之间取值。我们把整个28x28=784个点展开成1维向量。下面是一张手写的1来举例。

我们的训练数据的特征是一个55000x784的Tensor,第一个维度是图片的编号,第二个维度是图片中像素点的编号。

同时,训练的数据label是一个55000x10的Tensor,这里是对10个种类进行了one-hot编码,label是一个10维的向量,只有一个值为1,其余为0。比如数字0,对应的label就是[1,0,0,0,0,0,0,0,0,0]。

Softmax回归模型介绍

当我们处理多分类任务时,通常需要使用Softmax Regression模型。即使是卷积神经网络循环神经网络,如果是分类模型,最后一层也同样是Softmax Regression。它的工作原理很简单,将可以判定为某类的特征相加,然后将这些特征转化成为判定是这一类的概率。比如某个像素具有很强的证据说明这张图片不属于该类,那么相应的权值为负数,相反如果这个像素拥有有利的证据支持这张图片属于这个类,那么权值是正数。下图蓝色代表正的权重,红色代表负的权重。

可以用这些特征写成如下公式:

  1. 计算第i类的特征:i代表第i类,j代表一张图片的第j个像素。bi是额外的偏置量(bias)
  2. 对所有特征计算softmax:就是都计算一个exp函数,然后再进行标准化(让所有类别输出的概率值和为1)
  3. 判定为第i类的概率

如果将整个计算过程可视化,用下图表示:

如果将上图的连线变成公式:

最后将元素相乘变成矩阵乘法:

上述矩阵运算表达写成公式的话,可以用下面这样简洁的一行表达。

用TensorFlow实现Softmax回归模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf
# 不同的session之间的数据和运算相互独立
sess = tf.InteractiveSession()
# [None, 784]代表tensor的shape,None代表不限条数输入,784代表每条输入是一个784维的向量
x = tf.placeholder(tf.float32, [None, 784])
# 创建weights和biases
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# 实现 y = softmax(Wx+b)
y = tf.nn.softmax(tf.matmul(x, W) + b)
# 定义损失函数cross-entropy
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
# 随机梯度下降SGD,并设置学习速率0.5,优化目标设定为cross-entropy,得到进行训练的操作train_step
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# 使用全局参数初始化器,并执行run
tf.global_variables_initializer().run()
# 开始迭代执行训练操作train_step
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    train_step.run({x: batch_xs, y_: batch_ys})

# 对模型准确率进行验证
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
# 统计全部样本预测的accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 打印计算模型在测试集上的准确率
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

以上流程做的事情分为4部分:

  1. 定义算法公式,也就是神经网络forward时的计算
  2. 定义loss,选定优化器,并指定优化器优化loss
  3. 迭代地对数据进行训练
  4. 在测试集或验证集上对准确率进行评测
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tensorflow2.0手写数字识别(tensorflow手写体识别)
本节笔记作为 Tensorflow 的 Hello World,用 MNIST 手写数字识别来探索 Tensorflow。笔记的内容来自 Tensorflow 中文社区和黄文坚的《Tensorflow 实战》,只作为自己复习总结。
全栈程序员站长
2022/08/01
1.3K0
tensorflow2.0手写数字识别(tensorflow手写体识别)
Softmax 识别手写数字
MNIST是一个非常简单的机器视觉数据集,如下图所示,它由几万张28像素x28像素的手写数字组成,这些图片只包含灰度值信息。我们的任务就是对这些手写数字的图片进行分类,转成0~9一共十类。
用户1147447
2019/05/26
2.3K0
用TensorFlow进行手写数字识别
本文介绍了一种基于深度学习的图像识别方法,该方法采用卷积神经网络(CNN)和最大池化层来提取图像特征,并通过交叉熵损失函数进行优化。实验结果表明,该方法在MNIST数据集上达到了92%的准确率,效果良好。
longchen
2017/04/12
6.5K0
用TensorFlow进行手写数字识别
一步步提高手写数字的识别率(1)
手写数字识别是机器学习领域中的一个经典应用,很多机器学习算法以这个问题作为示例,其地位相当于程序界的hello world。这个问题具有以下两个特点:
云水木石
2019/07/01
1.6K0
一步步提高手写数字的识别率(1)
【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集
本文讲述用Tensorflow框架实现SoftMax模型识别手写数字集,来实现多分类。
LhWorld哥陪你聊算法
2018/09/13
6660
使用TensorFlow实现手写识别(Softmax)
准备工作 由于将TensorFlow安装到了Conda的tensorflow环境,虽然可以用Jupyter notebook打开,但是没有提示,写代码不方便,所以使用PyCharm进行编写。设置如下: 如果是新建项目,在选择使用python的地址的地方,找到anaconda目录,点击envs ----> tensorflow -----> bin -----> python2.7(我的是2.7) 如果已经创建了项目,但是没有用该环境下的python,就进入项目的设置里,找到project interpret
用户1332428
2018/03/08
9540
使用TensorFlow实现手写识别(Softmax)
TensorFlow实战:SoftMax手写体MNIST识别(Python完整源码)
之前的文章 TensorFlow的安装与初步了解,从TensorFlow的安装到基本的模块单元进行了初步的讲解。今天这篇文章我们使用TensorFlow针对于手写体识别数据集MNIST搭建一个softmax的多分类模型。 本文的程序主要分为两大模块,一个是对MNIST数据集的下载、解压、重构以及数据集的构建;另一个是构建softmax图及训练图。本程序主要是想去理解包含在这些代码里面的设计思想:TensorFlow工作流程和机器学习的基本概念。本文所使用的数据集和Python源代码都已经上传到我的GitHu
昱良
2018/04/08
2.6K0
TensorFlow实战:SoftMax手写体MNIST识别(Python完整源码)
tensorflow笔记(四)之MNIST手写识别系列一
http://www.cnblogs.com/fydeblog/p/7436310.html
努力努力再努力F
2018/09/11
6760
tensorflow笔记(四)之MNIST手写识别系列一
Tensorflow | MNIST手写字识别
原始的网址:https://www.tensorflow.org/versions/r0.12/tutorials/mnist/beginners/index.html#mnist-for-ml-beginners
努力在北京混出人样
2019/02/18
1.5K0
TensorFlow-1: 如何识别数字
本文通过使用 TensorFlow 搭建一个简单的神经网络来对 MNIST 数据集进行分类。通过训练模型,作者能够正确分类手写数字,并计算出准确率。
杨熹
2017/07/25
1.7K0
TensorFlow-1: 如何识别数字
人人都可以学的人工智能:TensorFlow 入门例子
这是用 TensorFlow 来识别手写数字的官方经典入门例子,数据都是已经处理过准备好了的,但是只到计算准确度概率那就停了,缺少拿实际图片运用的例子,初学者看完之后难免发蒙。于是,本文第二段用一些实际图片来验证我们的模型。
Bob.Chen
2018/05/02
1.5K2
人人都可以学的人工智能:TensorFlow 入门例子
一步步提高手写数字的识别率(2)
在前面一篇文章《一步步提高手写数字的识别率(1)》中,我们使用Softmax回归实现了一个简单的手写数字识别程序,在MNIST数据集上的准确率大约为92%。这是一个线性模型,其特点是简单易用,但拟合能力不强。而深度神经网络在线性模型的基础上引入隐藏层,并增加非线性激活函数,使得拟合复杂函数的能力大大增强。
云水木石
2019/07/01
8520
一步步提高手写数字的识别率(2)
mnist手写数字识别(TensorFlow-GPU)------原理及源码
本文主要是对mnist手写数据集这中的迷糊数字进行识别,在Softmax Regression基础上建立了一个较为简单的机器学习模型。
andrew_a
2019/07/30
6.2K0
mnist手写数字识别(TensorFlow-GPU)------原理及源码
Python人工智能 | 七.TensorFlow实现分类学习及MNIST手写体识别案例
前一篇文章讲解了Tensorboard可视化的基本用法,并绘制整个神经网络及训练、学习的参数变化情况。本篇文章将通过TensorFlow实现分类学习,以MNIST数字图片为例进行讲解。本文主要结合作者之前的博客、AI经验和"莫烦大神"的视频介绍,后面随着深入会讲解更多的Python人工智能案例及应用。
Eastmount
2021/12/01
6760
Python人工智能 | 七.TensorFlow实现分类学习及MNIST手写体识别案例
TensorFlow-手写数字识别(一)
本篇文章通过TensorFlow搭建最基础的全连接网络,使用MNIST数据集实现基础的模型训练和测试。
xxpcb
2020/08/04
2.5K0
21个项目玩转深度学习 学习笔记(1)
在Tensorflow中,无论是占位符还是变量,它们实际上都是Tensor,从Tensorflow的名字中,就可以看出Tensor在整个系统中处于核心地位。Tensorflow中的Tensor并不是具体的数值,只是一些我们希望Tensorflow系统计算的节点。
2018/09/03
1.3K0
【Tensorflow】 写给初学者的深度学习教程之 MNIST 数字识别
一般而言,MNIST 数据集测试就是机器学习和深度学习当中的"Hello World"工程,几乎是所有的教程都会把它放在最开始的地方.这是因为,这个简单的工程包含了大致的机器学习流程,通过练习这个工程有助于读者加深理解机器学习或者是深度学习的大致流程.
Frank909
2019/01/14
1.3K0
tensorflow笔记(五)之MNIST手写识别系列二
http://www.cnblogs.com/fydeblog/p/7455233.html
努力努力再努力F
2018/09/11
3220
tensorflow笔记(五)之MNIST手写识别系列二
Tensorflow解决MNIST手写数字分类问题
官网:https://www.tensorflow.org/tutorials/layers
week
2019/02/22
5330
Tensorflow解决MNIST手写数字分类问题
独家 | 一文读懂TensorFlow基础
本文长度为7196字,建议阅读10分钟 本文为你讲解如何使用Tensorflow进行机器学习和深度学习。 1. 前言 深度学习算法的成功使人工智能的研究和应用取得了突破性进展,并极大地改变了我们的生活。越来越多的开发人员都在学习深度学习方面的开发技术。Google推出的TensorFlow是目前最为流行的开源深度学习框架,在图形分类、音频处理、推荐系统和自然语言处理等场景下都有丰富的应用。尽管功能强大,该框架学习门槛并不高,只要掌握Python安装和使用,并对机器学习和神经网络方面的知识有所了解就可以上
数据派THU
2018/01/30
1.1K0
独家 | 一文读懂TensorFlow基础
推荐阅读
相关推荐
tensorflow2.0手写数字识别(tensorflow手写体识别)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验