TensorFlow实战第五课(MNIST手写数据集识别)
Tensorflow实现softmax regression识别手写数字
MNIST手写数字识别可以形象的描述为机器学习领域中的hello world。
MNIST是一个非常简单的机器视觉数据集。它由几万张28*28像素的手写数字组成,这些图片只包含灰度值信息。我们的任务就是对这些手写数字进行分类。转换为0-9共十个分类。
首先在命令行中运行如下代码加载MNIST手写数据集:
from tensorflow.examples.tutorials.mnist import input_data
#number 1 to 10 data
#创建文件夹存放数据
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
数据集中包含55000个样本,测试集中有10000个样本,同时验证集有5000个样本。每一个样本都有他对应的标注信息,即label。
我们将在训练集上训练模型,在验证集上检验效果并决定何时完成训练,最后我们在测评及评测模型效果。
准备好数据后我们开始设计算法。我们采用的是softmax regression的算法训练手写数字识别的分类模型。数字分为0-9,所以一共有十个类别,当我们对一张图片进行预测时,softmax regression会对每一种类别估算一个概率,然后取估算概率最大的数字作为模型的输出结果。
注:当我们处理多分类模型时,通常需要使用softmax regression。例如卷积神经网络或者循环神经网络,如果是分类模型,那么最后一层同样是softmax regression。
loss函数选择的是交叉熵函数,交叉熵用来衡量预测值与真实值的相似程度,如果完全相同,他们的交叉熵等于零。
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
reduction_indices=[1])) # loss
train方法(最优化方法)采用梯度下降法。
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.Session()
# tf.initialize_all_variables() 这种写法马上就要被废弃
# 替换成下面的写法:
sess.run(tf.global_variables_initializer())
完整代码:
#classification 分类学习 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data
#number 1 to 10 data
#创建文件夹存放数据
mnist = input_data.read_data_sets('MNIST_data',one_hot=True) def add_layer(inputs,in_size,out_size,activation_function=None):
#添加一个以上的层 并且返回这个层的输出 Weights = tf.Variable(tf.random_normal([in_size,out_size]))
biases = tf.Variable(tf.zeros([1,out_size])+0.1)
Wx_plus_b = tf.matmul(inputs,Weights)+biases if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs def compute_accuracy(v_xs,v_ys):
global prediction
y_pre = sess.run(prediction,feed_dict={xs:v_xs})
correct_prediction = tf.equal(tf.argmax(y_pre,1),tf.argmax(v_ys,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys})
return result #define placeholder for inputs to network
xs = tf.placeholder(tf.float32,[None,784])#None就是不规定他有多少sample,但是规定大小为28*28
ys = tf.placeholder(tf.float32,[None,10]) #add output layer
#激励函数采用softmax函数
prediction = add_layer(xs,784,10,activation_function=tf.nn.softmax) # the error between prediction and real data
'''loss函数即最优化目标函数 选用交叉熵函数
交叉熵用来衡量预测值和真实值相似程度
如果完全相同 ,他们的交叉熵为零
'''
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
reduction_indices=[1])) # loss
#采用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init) for i in range(2000):
#每次只取100张图片
batch_xs,batch_ys = mnist.train.next_batch(100)
sess.run(train_step,feed_dict={xs:batch_xs,ys:batch_ys})
if i%50==0:
print(compute_accuracy(mnist.test.images,mnist.test.labels))
输出结果:

TensorFlow实战第五课(MNIST手写数据集识别)的更多相关文章
- TensorFlow系列专题(六):实战项目Mnist手写数据集识别
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 导读 MNIST数据集 数据处理 单层隐藏层神经网络的实现 多层隐藏层神经 ...
- Tensorflow项目实战一:MNIST手写数字识别
此模型中,输入是28*28*1的图片,经过两个卷积层(卷积+池化)层之后,尺寸变为7*7*64,将最后一个卷积层展成一个以为向量,然后接两个全连接层,第一个全连接层加一个dropout,最后一个全连接 ...
- 吴裕雄 python 神经网络——TensorFlow 实现LeNet-5模型处理MNIST手写数据集
import os import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import ...
- Android+TensorFlow+CNN+MNIST 手写数字识别实现
Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...
- Tensorflow之MNIST手写数字识别:分类问题(1)
一.MNIST数据集读取 one hot 独热编码独热编码是一种稀疏向量,其中:一个向量设为1,其他元素均设为0.独热编码常用于表示拥有有限个可能值的字符串或标识符优点: 1.将离散特征的取值扩展 ...
- 基于tensorflow的MNIST手写数字识别(二)--入门篇
http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...
- 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识
深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...
- 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别
深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...
- 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 http://phunter.farbox.com/post/mxnet-tutorial1 用MXnet实战深度学 ...
随机推荐
- autoprefixer 处理css3的前缀
css3书写的时候,有时需要加上前缀,比如“-webkit-*.-moz-*”等等,但可能会写的不完整或者是写错,也很麻烦,那么autoprefixer可以处理这些. autoprefixer是一个后 ...
- JavaScript相关知识点
㈠JavaScript编写位置 ⑴可以将js代码编写到外部js文件中,然后通过script标签引入 写到外部文件中可以在不同的页面中同时使用,也可以利用到浏览器的缓存机制 推荐使用的方式 ...
- .net大文件上传断点续传源码
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- MySQL_(Java)使用JDBC创建用户名和密码校验查询方法
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL数据库中的数据,数据库名garysql,表名garytb,数据库中存在的用户表 通过JDBC对MySQL中的数据用户名和密码 ...
- TCP最大报文段长度MSS
最大报文段长度(MSS)表示TCP传往另一端的最大数据库的长度.当一个连接建立时,连接的双方都要通告各自需要接收的MSS选项(MSS选项只能出现在SYN报文段中).如果一方不接收来自另一方的MSS值, ...
- 微信小程序设置全局变量
为了提高程序的可用性我们在做项目的时候一定要设置全局变量 微信小程序里面有个app.js,我们可以在这个里面设置全局变量, globalData:{ userInfo:null, test:" ...
- mybatis延迟加载(assocation)
一.何为延迟加载? 延迟加载 我们并不需要总是在加载用户信息时就一定要加载他的账户信息.此时就是我们所说的延迟加载. 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. ...
- LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)
题目描述 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路 后 ...
- 【实用软件】GIF屏幕录制软件-ScreenToGif (在GitHub开源)
抛个问题,自问自答 ScreenToGif 经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚某个动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快 ...
- react 的基础知识
react 是目前最流行的框架: 其中是采用 mvvm 的思想,让我们把所有的只关注视图层和逻辑层, 从而可以更好的书写代码: 在 react 中我们的 html 结构也是通过 js 来实现的,而且在 ...