TensFlow框架学习之MNIST机器学习入门

  1. 前言:初学TensorFlow和机器学习,MNIST算法的每条语句都不是很清楚,通过查阅资料,将每句代码的基本用法差不多理解了。希望能够帮助正在学习的你

[python] view plain copy

  1. <span style="font-size:32px;">from tensorflow.examples.tutorials.mnist  import  input_data
  2. mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)</span>
#mnist.train:训练数据,mnist.test:测试数据,mnist.valication:开发数据
#每份MNIST数据包含手写数字图像(后记为xs)和对应标注(后记为ys)2部分
# 训练集和测试集均包含xs和ys
# 所以训练图像是mnist.train.images、训练标注是mnist.train.labels.训练图像是mnist.train.images训练标注是mnist.train.labels

[python] view plain copy

  1. <span style="font-size:32px;">print(mnist.train.images.shape,mnist.train.labels.shape)
  2. print(mnist.test.images.shape,mnist.test.labels.shape)
  3. print(mnist.validation.images.shape,mnist.validation.labels.shape )</span>
"""载入TensorFlow库,创建新的InteractionSession,使用命令将session注册为默认的session,之后的运算也默认跑在这个session不同session之间的数据和运算是相互独立的"""

[python] view plain copy

  1. <span style="font-size:32px;">import tensorflow as  tf
  2. sess = tf.InteractiveSession()</span>
"""x表示所有的手写体图片。它并不是一个固定值而是一个占位符,只有在TensorFlow运行时才会被设定真实
创建一个Placeholder,即输入数据的地方
第一个参数是数据类型,使用一个二维浮点
第二个参数[None,784]代表tensor的shape,代表数据的尺寸,None代表不限条数的输入,784代表每条输入是一个784维的向量"""

[python] view plain copy

  1. <span style="font-size:32px;">x = tf.placeholder(tf.float32,[None,784])</span>
"""tf.Variable创建变量,使用 tf.zeros 将变量 W 和 b 设为初始化全为0的张量
w的形状是一个[784,10]的张量,第一个向量列表表示每个图片都有784个像素点,第二个向量列表表示从“0”到“9”一共有10类图片。所以w用一个784维度的向量表示像素值,用10维度的向量表示分类,
而2个向量进行乘法运算(或者说2个向量的笛卡尔集)就表示“某个像素在某个分类下的证据”。
b的形状是[10],他仅表示10个分类的偏移值。
"""

[python] view plain copy

  1. <span style="font-size:32px;">w = tf.Variable(tf.zeros([784,10]))
  2. b = tf.Variable(tf.zeros([10]))</span>
"""tf.nn包含了大量神经网络的组件,tf.matmul是TensorFlow中的矩阵乘法函数
tf.matmul(x, W) 表达式表示W和x的乘积运算,对应之前等式(y=softmax(Wx+b))的Wx,这个计算结果会得到一个y1=[None, 10]的张量,表示每个图片在10个分类下权重计算结果。
tf.matmul(x, W) + b 表示执行y2=y1+b的运算,它计算每个分类的偏移量。y2还是一个[None,10]的张量。最后使用 tf.nn.softmax 进行归一计算,得到每张图片在每个分类下概率。
TensorFlow能够将forward和backward的内容自动实现,只要接下来定义好loss,训练时会自动求导并进行梯度下降"""

[python] view plain copy

  1. <span style="font-size:32px;">y = tf.nn.softmax(tf.matmul(x,w) + b)</span>
"""定义一个placeholder,输入的是真实的label,用来计算cross-entropy.
这里的y_ * tf.log(y)是对应交叉熵公式的乘积部分,tf.reduce_sum对应求和部分。
tf.reduce_mean则用来对每个batch数据结果求均值"""

[python] view plain copy

  1. <span style="font-size: 32px;">y_ = tf.placeholder(tf.float32,[None,10])cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),reduction_indices=[1]))</span>
"""TensorFlow会根据我们定义的整个计算图自动求导,并根据反向传播进行训练,在每一轮迭代时更新参数来减小loss.
后台TensorFlow会自动添加许多运算操作来实现提到的反向传播和梯度下降。
我们只需要调用封装好的优化器,提供数据给它就好
调用tf.train.GradientDescentOptimizer,设置学习速率为0.5,优化目标设为cross-entropy,得到进行训练的操作train_step"""

[python] view plain copy

  1. <span style="font-size:32px;">train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)</span>
"""使用TensorFlow的全局参数初始化器,执行它的run方法"""

[python] view plain copy

  1. tf.global_variables_initializer().run()
"""抽取100条样本构成一个mini-batch,并提供给placeholder
接着调用train_step对样本进行训练"""

[python] view plain copy

  1. <span style="font-size:32px;">for i in range(1000):    </span>

[python] view plain copy

  1. <span style="font-size:32px;">    batch_xs,batch_ys = mnist.train.next_batch(100)   </span>

[python] view plain copy

  1. <span style="font-size:32px;">    train_step.run({x:batch_xs,y_:batch_ys})</span>
"""tf.argmax是从一个tensor中寻找最大值的序号
tf.argmax(y,1)是求各个预测的数字中概率最大的那一个
tf.argmax(y_,1)是找样本的真是数字类别。
而tf.equal则用来判断数字类别是否就是正确的类别。
correct_prediction表示计算分类是否正确"""

[python] view plain copy

  1. <span style="font-size:32px;">correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))</span>
"""统计全部样本预测的accuracy
先用tf.cast将之前corrext_prediction输出的bool值转换为float32,再求平均值"""

[python] view plain copy

  1. <span style="font-size:32px;">accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))</span>
#将测试数据的特征和Label输入评测流程accuracy,计算模型在测试集上的准确率,打印结果

[python] view plain copy

  1. <span style="font-size:32px;">print(accuracy.eval({x:mnist.test.images,y_:mnist.test.labels}))</span>
总结TensorFlow实现算法的流程:
(1)定义算法公式,也就是神经网络forward时的计算
(2)定义loss,选定优化器,指定优化loss
(3)迭代数据进行训练
(4)使用测试集进行验证
时间: 2024-10-06 10:09:17

TensFlow框架学习之MNIST机器学习入门的相关文章

Tensorflow学习笔记(一):MNIST机器学习入门

学习深度学习,首先从深度学习的入门MNIST入手.通过这个例子,了解Tensorflow的工作流程和机器学习的基本概念. 一  MNIST数据集 MNIST是入门级的计算机视觉数据集,包含了各种手写数字的图片.在这个例子中就是通过机器学习训练一个模型,以识别图片中的数字. MNIST数据集来自 http://yann.lecun.com/exdb/mnist/ Tensorflow提供了一份python代码用于自动下载安装数据集.Tensorflow官方文档中的url打不开,在CSDN上找到了一

MNIST机器学习入门

1.1.1 简介 下载MNIST数据集,并打印一些基本信息: python download.py # 从tensorflow.examples.tutorials.mnist引入模块,这是TensorFlow为了教学MNIST而提前编制的程序 from tensorflow.examples.tutorials.mnist import input_data # 从MNIST_data/中读取MNIST数据.这条语句在数据不存在时,会自动执行下载 mnist = input_data.read

MNIST机器学习入门(一)

一.简介 首先介绍MNIST 数据集.如图1-1 所示, MNIST 数据集主要由一些手写数字的图片和相应的标签组成,图片一共有10 类,分别对应从0-9 ,共10 个阿拉伯数字. 原始的MNIST 数据库一共包含下面4 个文件, 见表1-1 . 在表1 - 1 中,图像数据是指很多张手写字符的图像,图像的标签是指每一张图像实际对应的数字是几,也就是说,在MNIST 数据集中的每一张图像都事先标明了对应的数字.  在MNIST 数据集中有两类图像:一类是训练图像(对应文件train-images

MNIST机器学习入门(二)

在前一个博客中,我们已经对MNIST 数据集和TensorFlow 中MNIST 数据集的载入有了基本的了解.本节将真正以TensorFlow 为工具,写一个手写体数字识别程序,使用的机器学习方法是Softmax 回归. 一.Softmax回归的原理 Softmax 回归是一个线性的多类分类模型,实际上它是直接从Logistic回归模型转化而来的.区别在于Logistic 回归模型为两类分类模型,而Softmax 模型为多类分类模型. 在手写体识别问题中, 一共有10 个类别( 0~9 ),我们

【转载】机器学习入门者学习指南(经验分享)

机器学习入门者学习指南(经验分享) 2013-09-21 14:47 本人计算机研二,专业方向自然语言处理,个人对于机器学习挺感兴趣,于是开始学习.所以,原来这家伙是个菜鸟……正是由于自己是个菜鸟,所以体会到自学机器学习的艰辛,于是在这里分享一下个人的经验,希望能对入门者有所帮助.一些有关机器学习的介绍在这里就不做详细介绍了,感兴趣的同学可以去维基百科.就直接进入正题.1.去Coursera上Andrew Ng的<机器学习>,完成所有作业,最好能全部拿满分.这是相当入门的课程,老师是机器学习领

机器学习入门实践——线性回归&非线性回归&mnist手写体识别

把一本<白话深度学习与tensorflow>给啃完了,了解了一下基本的BP网络,CNN,RNN这些.感觉实际上算法本身不是特别的深奥难懂,最简单的BP网络基本上学完微积分和概率论就能搞懂,CNN引入的卷积,池化等也是数字图像处理中比较成熟的理论,RNN使用的数学工具相对而言比较高深一些,需要再深入消化消化,最近也在啃白皮书,争取从数学上把这些理论吃透 当然光学理论不太行,还是得要有一些实践的,下面是三个入门级别的,可以用来辅助对BP网络的理解 环境:win10 WSL ubuntu 18.04

Spring.NET依赖注入框架学习--入门

Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 带着问题,我们一起来看看下面内容(适合刚刚学习或者对依赖注入还太懂的小神看---大神直接飘过) 对以上几个问题都滚瓜烂熟的直接跳下一篇 这里我找到一篇我认为比较好的博文   原地址:http://www.cnblogs.com/jhli/p/6019895.html ---感谢博主分享 1. Io

机器学习入门资源--汇总

机器学习入门资源--汇总 基本概念 机器学习 机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法.机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法.因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论.算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法. 下面从微观到宏观试着梳理一下机器学习的范畴:

老司机学python篇:第一季(基础速过、机器学习入门)

详情请交流  QQ  709639943 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小时的高质量.精品.1080P高清视频教程!包括标准库.socket网络编程.多线程.多进程和协程. 00.Django实战之用户认证系统 00.Django实战之企业级博客 00.深入浅出Netty源码剖析 00.NIO+Netty5各种RPC架构实战演练 00.JMeter 深入进阶性能测试体系 各领域企业实战 00.30天搞