TensorFlow手写字识别mnist入门篇(代码及详解)
2018-03-18 12:35
393 查看
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('/2017/python/',one_hot=True)
x = tf.placeholder("float",[None,784])
#先占个位,占个tensor,等着喂图片数据
#X的行可以任意取值,表示图片数量,可以1张1张取,也可100张100张取,很显然,每次取100张效率高一些
W = tf.Variable(tf.zeros([784,10]))#权重参数
#每一列784个像素点,共10列,每一列代表0~9数字,每一列的W1~W784像素点分别用于表示每个像素点对应该数字的权重值Weight,即每个数字都有784个权重值
b = tf.Variable(tf.zeros([10]))#每个数字对应的一个偏置值bias
y = tf.nn.softmax(tf.matmul(x,W)+b)#softmax函数将算出的10个数转换成每个数字的概率值,总和为1,即最后那个概率值高,即为该数字(我理解就是归一化)
#softmax概率化函数
y_ = tf.placeholder("float",[None,10])#占个tensor,等着喂数据,图片的label
#如果是数字1,y_=[0,1,0,0,0,0,0,0,0,0],one-hot vector
#交叉熵,衡量预测的标签y与真是标签y_的关系,描述真相的低效性
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#因为本次学习,是以100张图片为一个batch,所以这里描述的是每100张图片预测性能的总和
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#最核心的一个步骤,这里选取了梯度下降优化器,目标是将交叉熵最小化
#可以选择很多种优化器
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
#argmax函数,argmax(input,axis,name,dimension)
#axis=0按列fetch最大值下标向量(=1按行),dimension功能与其相同,以axis优先
#equal函数,两个矩阵对应值相同,则返回布尔型True,否则返回布尔型False,返回与第一个矩阵维度相同
#这里返回预测数字标签和真实数字标签的对比情况
#cast函数,类型转换,cast(input,dtype,name),将输入数据转换成目标类型数据
#reduce_mean()函数,求平均值,这里相当于求分类的正确率
#每训练50次,对测试数据进行预测一次
for i in range(1000):
batch_xs,batch_ys = mnist.train.next_batch(100)#每次fetch100张图片
sess.run(train_step,feed_dict={x : batch_xs,y_ : batch_ys})
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
if i%50==0:
print(i,sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))
最后的准确率91%
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('/2017/python/',one_hot=True)
x = tf.placeholder("float",[None,784])
#先占个位,占个tensor,等着喂图片数据
#X的行可以任意取值,表示图片数量,可以1张1张取,也可100张100张取,很显然,每次取100张效率高一些
W = tf.Variable(tf.zeros([784,10]))#权重参数
#每一列784个像素点,共10列,每一列代表0~9数字,每一列的W1~W784像素点分别用于表示每个像素点对应该数字的权重值Weight,即每个数字都有784个权重值
b = tf.Variable(tf.zeros([10]))#每个数字对应的一个偏置值bias
y = tf.nn.softmax(tf.matmul(x,W)+b)#softmax函数将算出的10个数转换成每个数字的概率值,总和为1,即最后那个概率值高,即为该数字(我理解就是归一化)
#softmax概率化函数
y_ = tf.placeholder("float",[None,10])#占个tensor,等着喂数据,图片的label
#如果是数字1,y_=[0,1,0,0,0,0,0,0,0,0],one-hot vector
#交叉熵,衡量预测的标签y与真是标签y_的关系,描述真相的低效性
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#因为本次学习,是以100张图片为一个batch,所以这里描述的是每100张图片预测性能的总和
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#最核心的一个步骤,这里选取了梯度下降优化器,目标是将交叉熵最小化
#可以选择很多种优化器
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
#argmax函数,argmax(input,axis,name,dimension)
#axis=0按列fetch最大值下标向量(=1按行),dimension功能与其相同,以axis优先
#equal函数,两个矩阵对应值相同,则返回布尔型True,否则返回布尔型False,返回与第一个矩阵维度相同
#这里返回预测数字标签和真实数字标签的对比情况
#cast函数,类型转换,cast(input,dtype,name),将输入数据转换成目标类型数据
#reduce_mean()函数,求平均值,这里相当于求分类的正确率
#每训练50次,对测试数据进行预测一次
for i in range(1000):
batch_xs,batch_ys = mnist.train.next_batch(100)#每次fetch100张图片
sess.run(train_step,feed_dict={x : batch_xs,y_ : batch_ys})
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
if i%50==0:
print(i,sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))
最后的准确率91%
相关文章推荐
- Deep Learning-TensorFlow (1) CNN卷积神经网络_MNIST手写数字识别代码实现详解
- 30分钟手把手带你入门TensorFlow——Mnist手写数字识别实战教程
- tensorflow入门-mnist手写数字识别(一)
- TensorFlow代码实现(一)[MNIST手写数字识别]
- tensorflow 入门小例子(mnist手写数字识别)
- tensorflow的入门--手写数字识别mnist的傻瓜教程
- 基于tensorflow的MNIST手写数字识别(二)--入门篇
- TensorFlow 入门之手写识别(MNIST) softmax算法
- 基于tensorflow的MNIST手写数字识别(二)--入门篇
- TensorFlow 入门之手写识别(MNIST) 数据处理 一
- Tensorflow系列之(二):详解CNN识别MNIST手写数字集
- TensorFlow手写数字MNIST识别,两层卷积神经网路(代码及代码注释)最后的准确率0.99
- [TensorFlow]入门学习笔记(2)-卷积神经网络mnist手写识别
- tensorflow入门实践例子—MNIST手写数字识别
- TensorFlow 入门之手写识别(MNIST) softmax算法 二
- Deep Learning-TensorFlow (1) CNN卷积神经网络_MNIST手写数字识别代码实现
- 基于tensorflow的MNIST手写数字识别--入门篇
- 【Tensorflow入门】手写字体识别(MNIST)
- 【深度学习】笔记2_caffe自带的第一个例子,Mnist手写数字识别代码,过程,网络详解
- 手写数字识别mnist-demo 代码整理总结