这个程序参考自极客学院

  1. from tensorflow.examples.tutorials.mnist import input_data
  2. import tensorflow as tf
  3. # MNIST数据存放的路径
  4. file = "./MNIST"
  5. # 导入数据
  6. mnist = input_data.read_data_sets(file, one_hot=True)
  7. # 模型的输入和输出
  8. x = tf.placeholder(tf.float32, shape=[None, 784])
  9. y_ = tf.placeholder(tf.float32, shape=[None, 10])
  10. # 模型的权重和偏移量
  11. W = tf.Variable(tf.zeros([784, 10]))
  12. b = tf.Variable(tf.zeros([10]))
  13. # 创建Session
  14. sess = tf.InteractiveSession()
  15. # 初始化权重变量
  16. sess.run(tf.global_variables_initializer())
  17. y = tf.nn.softmax(tf.matmul(x, W) + b)
  18. # 交叉熵
  19. cross_entropy = -tf.reduce_sum(y_*tf.log(y))
  20. # 训练
  21. train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
  22. for i in range(1000):
  23. batch = mnist.train.next_batch(50)
  24. train_step.run(feed_dict={x: batch[0], y_: batch[1]})
  25. # 测试
  26. correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
  27. accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
  28. print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_:mnist.test.labels}))

注释:

  1. # MNIST数据存放的路径
  2. file = "./MNIST"
  3. # 导入数据
  4. mnist = input_data.read_data_sets(file, one_hot=True)

将下载MNIST数据到./MNIST/文件夹下,此过程可能会由于网络问题而出错。建议自己从MNIST官网下载。将下载好的文件放到上述路径下即可。input_data.read_data_sets()函数可以自动检测指定目录下是否存在MNIST数据,如果存在,就不会下载了。

  1. # 模型的输入和输出
  2. x = tf.placeholder(tf.float32, shape=[None, 784])
  3. y_ = tf.placeholder(tf.float32, shape=[None, 10])

这里xy不是特定的值。它们是表示输入和输出的占位符,可以在进行计算的时候进行赋值。

模型的输入x是一个2维的浮点数张量。它的大小为shape=[None, 784],其中784是一张展平的MNIST图片的维度。None表示其值不固定。输出y_也是一个2维张量,它的每一行都是一个10维的one-hot向量,用来表示对应的MNIST图片的类别。

  1. # 模型的权重和偏移量
  2. W = tf.Variable(tf.zeros([784, 10]))
  3. b = tf.Variable(tf.zeros([10]))

变量Wb是线性模型的参数,这个线性模型用如下表达式表示:

y_=x∗W+b

其中,y_和x分别表示上述模型的输入和输出。W是一个784∗10的矩阵,因为输入有784个特征,同时有10个输出值。b是一个10维的向量,是因为输出有10个分类。

  1. # 创建Session
  2. sess = tf.InteractiveSession()
  3. # 初始化权重变量
  4. # 以前版本的初始化代码是
  5. # sess.run(tf.initialize_all_variables())
  6. sess.run(tf.global_variables_initializer())

变量需要经过初始化才可以在Session中使用。

  1. # 构建回归模型
  2. y = tf.nn.softmax(tf.matmul(x, W) + b)

把向量化后的图片x和权重矩阵W相乘,加上偏移量b,然后计算每个分类的softmax概率值。

  1. # 交叉熵
  2. cross_entropy = -tf.reduce_sum(y_*tf.log(y))

为训练过程指定损失函数,损失函数是用来评估模型一次预测的好与坏的。在这里使用目标类别和预测类别之间的交叉熵作为我们的损失函数。交叉熵定义如下:

L(y_,y)=−∑iy_ilog(yi)

其中y_表示目标类别,也就是真实值。y是预测类别,就是模型的输出值。

  1. # 训练
  2. train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
  3. for i in range(1000):
  4. batch = mnist.train.next_batch(50)
  5. train_step.run(feed_dict={x: batch[0], y_: batch[1]})

这里我们使用TensorFlow内置的梯度下降来进行优化,即让损失函数的值下降,步长为0.01。然后通过循环,不断地训练模型。每次循环,都会从训练集中加载50个样本。

  1. # 测试
  2. # 这里返回一个布尔数组,形如[True, False, True]
  3. correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
  4. # 将布尔数组转换为浮点数,并取平均值,如上布尔数组可以转换为[1, 0, 1],计算平均值为0.667
  5. accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
  6. # 计算在测试数据上的准确率
  7. print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_:mnist.test.labels}))

模型到这里就构建完成了,但这个模型到底好不好,我们并不知道。所以需要在测试集上验证模型的泛化能力。

最后,这个模型的准确率约为0.91,结果如下:

TensorFlow笔记——关于MNIST数据的一个简单的例子的更多相关文章

  1. tensorflow笔记:流程,概念和简单代码注释

    tensorflow是google在2015年开源的深度学习框架,可以很方便的检验算法效果.这两天看了看官方的tutorial,极客学院的文档,以及综合tensorflow的源码,把自己的心得整理了一 ...

  2. 扩展Python模块系列(二)----一个简单的例子

    本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...

  3. Struts2的配置和一个简单的例子

    Struts2的配置和一个简单的例子 笔记仓库:https://github.com/nnngu/LearningNotes 简介 这篇文章主要讲如何在 IntelliJ IDEA 中使用 Strut ...

  4. 一个简单的例子搞懂ES6之Promise

    ES5中实现异步的常见方式不外乎以下几种: 1. 回调函数 2. 事件驱动 2. 自定义事件(根本上原理同事件驱动相同) 而ES6中的Promise的出现就使得异步变得非常简单.promise中的异步 ...

  5. Linux内核中的信号机制--一个简单的例子【转】

    本文转载自:http://blog.csdn.net/ce123_zhouwei/article/details/8562958 Linux内核中的信号机制--一个简单的例子 Author:ce123 ...

  6. 从一个简单的例子谈谈package与import机制

    转,原文:http://annie09.iteye.com/blog/469997 http://blog.csdn.net/gdsy/article/details/398072 这两篇我也不知道到 ...

  7. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

  8. Spring-Context之一:一个简单的例子

    很久之前就想系统的学习和掌握Spring框架,但是拖了很久都没有行动.现在趁着在外出差杂事不多,就花时间来由浅入深的研究下Spring框架.Spring框架这几年来已经发展成为一个巨无霸产品.从最初的 ...

  9. 关于apriori算法的一个简单的例子

    apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...

随机推荐

  1. JMM_Java内存模型

    一.什么是 JMM JMM : Java 内存模型,它并不实际存在,是一种概念,一种约定! 作用 :主要是定义了 线程 与 主内存 之间存取数据的一些规则,进行一定的约束. 二.关于 JMM 的约定 ...

  2. Hyperledger Fabric——balance transfer(四)安装和实例化chaincode

    详细解析blance transfer示例的安装(install)和实例化(Instantiate)链码(chaincode)的过程.安装chaincode会根据本地的链码文件生成chaincode镜 ...

  3. Pyqt5_QlineEdit

    QlineEdit 方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右对齐 Qt.AlignCenter:水 ...

  4. java——assert(断言)方法

    包:org.junit.Assert; assertEqual(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,相等则测试用例通过. assertNotEqual(a,b,[ms ...

  5. cp: 无法创建普通文件 : 文件已存在

    背景 碰到一个偶现的编译出错问题,如图 报错的信息是 cp: 无法创建普通文件"xxx": 文件已存在 排查原因 看了下 Makefile,这句非常简单,就是 cp ./xxx . ...

  6. 《机器学习Python实现_09_02_决策树_CART》

    简介 CART树即分类回归树(classification and regression tree),顾名思义,它即能用作分类任务又能用作回归任务,它的应用比较广泛,通常会用作集成学习的基分类器,总得 ...

  7. 【Oracle】系统视图USER_TAB_COLS和USER_TAB_COLUMNS

    视图SYS.USER_TAB_COLS和SYS.USER_TAB_COLUMNS都保存了当前用户的表.视图和Clusters中的列信息.通过检索这两个表,可以方便的获取到表的结构. 主要的列属性有:  ...

  8. 二刷Redux笔记

    关于react的一些思考 所有的数据全部先要发送给容器,然后容器负责接受数据单后再分发数据给他下面的组件,通过props来传递,一个页面就可以相当于一个容器,容器之中就会有很多子组件,一般组件只负责接 ...

  9. 【数字图像处理】OpenCV中cv2.imread()与PIL中Image.open()的差别

    cv2.imread()与PIL中Image.open()两个函数都是用来读取图像,但是在使用过程存在一些差别. 1. 首先,从导入库方面看: # opencv-python import cv2 # ...

  10. Hadoop Yarn REST API未授权漏洞利用

    Hadoop Yarn REST API未授权漏洞利用 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一 ...