本节基于回归学习对 MNIST 数据集进行处理,但将添加一些 TensorBoard 总结以便更好地理解 MNIST 数据集。

MNIST由https://www.tensorflow.org/get_started/mnist/beginners提供。

大部分人已经对 MNIST 数据集很熟悉了,它是机器学习的基础,包含手写数字的图像及其标签来说明它是哪个数字。

对于逻辑回归,对输出 y 使用独热(one-hot)编码。因此,有 10 位表示输出,每位的值为 1 或 0,独热意味着对于每个图片的标签 y,10 位中仅有一位的值为 1,其余的为 0。

因此,对于手写数字 8 的图像,其编码值为 [0000000010]:

具体做法

  1. 导入所需的模块:


     
  2. 可以从模块 input_data 给出的 TensorFlow 示例中获取 MNIST 的输入数据。该 one_hot 标志设置为真,以使用标签的 one_hot 编码。这产生了两个张量,大小为 [55000,784] 的 mnist.train.images 和大小为 [55000,10] 的 mnist.train.labels。mnist.train.images 的每项都是一个范围介于 0 到 1 的像素强度:

     
  3. 在 TensorFlow 图中为训练数据集的输入 x 和标签 y 创建占位符:

     
  4. 创建学习变量、权重和偏置:

     
  5. 创建逻辑回归模型。TensorFlow OP 给出了 name_scope("wx_b"):

     
  6. 训练时添加 summary 操作来收集数据。使用直方图以便看到权重和偏置随时间相对于彼此值的变化关系。可以通过 TensorBoard Histogtam 选项卡看到:

     
  7. 定义交叉熵(cross-entropy)和损失(loss)函数,并添加 name scope 和 summary 以实现更好的可视化。使用 scalar summary 来获得随时间变化的损失函数。scalar summary 在 Events 选项卡下可见:

     
  8. 采用 TensorFlow GradientDescentOptimizer,学习率为 0.01。为了更好地可视化,定义一个 name_scope:

     
  9. 为变量进行初始化:

     
  10. 组合所有的 summary 操作:

     
  11. 现在,可以定义会话并将所有的 summary 存储在定义的文件夹中:

     
  12. 经过 30 个周期,准确率达到了 86.5%;经过 50 个周期,准确率达到了 89.36%;经过 100 个周期,准确率提高到了 90.91 %。

解读分析

这里使用张量 tensorboard--logdir=garphs 运行 TensorBoard。在浏览器中,导航到网址 localhost:6006 查看 TensorBoard。该模型图如下:

 

 

在 Histogram 选项卡下,可以看到权重(weights)和偏置(biases)的直方图:


 

权重和偏置的分布如下:


 

可以看到,随着时间的推移,偏置和权重都发生了变化。在该示例中,根据 TensorBoard 中的分布可知偏置变化的范围更大。在 Events 选项卡下,可以看到 scalar summary,即本示例中的交叉熵。下图显示交叉熵损失随时间不断减少:

TensorFlow从0到1之TensorFlow逻辑回归处理MNIST数据集(17)的更多相关文章

  1. TensorFlow从0到1之TensorFlow实现反向传播算法(21)

    反向传播(BPN)算法是神经网络中研究最多.使用最多的算法之一,它用于将输出层中的误差传播到隐藏层的神经元,然后用于更新权重. 学习 BPN 算法可以分成以下两个过程: 正向传播:输入被馈送到网络,信 ...

  2. TensorFlow从0到1之TensorFlow实现单层感知机(20)

    简单感知机是一个单层神经网络.它使用阈值激活函数,正如 Marvin Minsky 在论文中所证明的,它只能解决线性可分的问题.虽然这限制了单层感知机只能应用于线性可分问题,但它具有学习能力已经很好了 ...

  3. TensorFlow从0到1之TensorFlow优化器(13)

    高中数学学过,函数在一阶导数为零的地方达到其最大值和最小值.梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降. 在回归中,使用梯度下降来优化损失函数并获得系数.本节将介绍如何使 ...

  4. TensorFlow从0到1之TensorFlow损失函数(12)

    正如前面所讨论的,在回归中定义了损失函数或目标函数,其目的是找到使损失最小化的系数.本节将介绍如何在 TensorFlow 中定义损失函数,并根据问题选择合适的损失函数. 声明一个损失函数需要将系数定 ...

  5. TensorFlow从0到1之TensorFlow Keras及其用法(25)

    Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,你可以编译和拟合模型.之后,它可以用于预测.变量声明.占位 ...

  6. TensorFlow从0到1之TensorFlow多层感知机函数逼近过程(23)

    Hornik 等人的工作(http://www.cs.cmu.edu/~bhiksha/courses/deeplearning/Fall.2016/notes/Sonia_Hornik.pdf)证明 ...

  7. TensorFlow从0到1之TensorFlow常用激活函数(19)

    每个神经元都必须有激活函数.它们为神经元提供了模拟复杂非线性数据集所必需的非线性特性.该函数取所有输入的加权和,进而生成一个输出信号.你可以把它看作输入和输出之间的转换.使用适当的激活函数,可以将输出 ...

  8. TensorFlow从0到1之TensorFlow csv文件读取数据(14)

    大多数人了解 Pandas 及其在处理大数据文件方面的实用性.TensorFlow 提供了读取这种文件的方法. 前面章节中,介绍了如何在 TensorFlow 中读取文件,本节将重点介绍如何从 CSV ...

  9. TensorFlow从0到1之TensorFlow超参数及其调整(24)

    正如你目前所看到的,神经网络的性能非常依赖超参数.因此,了解这些参数如何影响网络变得至关重要. 常见的超参数是学习率.正则化器.正则化系数.隐藏层的维数.初始权重值,甚至选择什么样的优化器优化权重和偏 ...

随机推荐

  1. poj3687拓扑排序

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14749   Accepted: 4325 D ...

  2. SpringBoot自定义装配的多种实现方法

    Spring手动装配实现 对于需要加载的类文件,使用@Configuration/@Component/@Service/@Repository修饰 @Configuration public cla ...

  3. 剑指Offer之旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  4. linux高级应用第九章-正则表达式

    笔记部分 基础正则表达式: ^   第1个符号 ,以什么什么开头   ^m $  第2个符号,以什么什么结尾  m$    ,还表示空行,或空格,可以用cat  -An 试一下 ^$ 第3个符号,空行 ...

  5. 利用metasploit复现永恒之蓝

    环境 目标机器:windows 7 ,172.16.136.169 攻击机:安装了Metasploit 的 ubuntu16.04 ,172.16.136.130 (安装Metasploit:在 Ub ...

  6. 【Python】组合数据类型

    集合类型 集合类型定义 集合是多个元素的无序组合 集合类型与数学中的集合概念一致 集合元素之间无序,每个元素唯一,不存在相同元素 集合元素不可更改,不能是可变数据类型 理解:因为集合类型不重复,所以不 ...

  7. AES实现财务数据的加密解密存储

    需求背景 众所周知,金融行业有各种各样的财务报表,有些报表涉及到公司财务或经营相关的敏感数据,需要进行加密存储,只有掌握密钥的用户才能看到解密后的数据.注意,这里所说的加密并不是针对整个数据库或者表全 ...

  8. Rocket - tilelink - fastProperty

    https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大)   ...

  9. js循环语句while,do..while,for

    1. while循环 while(循环条件){ 循环体语句块; } 2.do..while循环 do{ 循环体语句块; }while(循环条件) 两者区别:while先判断后执行.循环体语句可能一次都 ...

  10. Java实现 LeetCode 790 多米诺和托米诺平铺(递推)

    790. 多米诺和托米诺平铺 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- &q ...