TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门

标签: 机器学习SoftmaxTensorFlow教程
2016-08-02 22:12 3729人阅读 评论(0) 收藏 举报
 分类:
TensorFlow(4)  深度学习 DeepLearning(2) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

TensorFlow教程的第一章“MNIST机器学习入门”很简单,用了一个很简单的网络,实现了MNIST样本训练。

教程链接:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html

下面这些内容主要是解释这个教程中不是特别明确的地方。

1. 怎样理解MNIST

MNIST的全称是Mixed National Institute of Standards and Technology database,是一系列带标记的数字图片。原始的NIST数据集的训练集是美国人口普查局的雇员的笔迹,而验证集是采集自美国中学生的笔迹。所以从机器学习的角度看,这是一种不太合理的样本采集。因此Lecun在进行卷积神经网络的研究时候从原始的NIST两个数据集中选择并重新混合形成新的训练集和验证集,也就是现在的MNIST。MNIST的图片一般都是28*28的图片,每个像素值进行了归一化,使得其在0-1范围内,不过也有部分数据集把它们又恢复到0-255,每个数字图片都有对应的标记。MNIST的训练集一共有60000个样本,而验证集有10000个样本。

2.怎样理解权值和Softmax

“MNIST机器学习入门”里面,没有用卷积神经网络,而是用了一个全连接神经网络+Softmax输出层。

MNIST的一幅图片是28*28,因此一共有784个像素值,在第一个例子里面,我们就直接就考虑用这784个数字得出正确的数字结果。最简单的考虑,我们要对这个784个数字进行加权求和,然后加点偏置,然后衡量一下得出的结果,看到底和哪个数字最像。那么这个加权加偏移的结构就是全连接神经网,而这个衡量结果的过程就是Softmax。实际的运算是将784个像素输入加权,并且用不同的权值加权10次(因为有0-9一共10个数字),得到10个不同的结果,最后使用Softmax进行结果的输出。

Softmax的公式如下,这个Xi是得到的10个不同的结果。

因此,最终得到的10个输出都会有一个概率值,这个概率值处于0-1之间,而且10个输出相加等于1。

将整个神经网络表示成一个表达式,就是:

其中W是权值,b是偏移

3.怎样训练这个网络?

按照TensorFlow的封装,训练这个例子中的神经网络只是几句话的事情。

为了衡量目前神经网络中的权值和偏移是否合理,我们可以定义交叉熵。交叉熵的公式是:

y 是我们预测的概率分布, y' 是实际的分布,比如我这个数字是2,那么我实际的分布就应该是(0,0,1,0,0,0,0,0,0,0)。而神经网输出的结果即预测的分布y可能是(0.01,0.05,0.5,0.05,0.04.......),那么交叉熵就是-log(0.5)>0,因此如果神经网络的性能约好,那么交叉熵就会越小,最终接近于0. 在这个例子的训练中,使用的是随机梯度下降法结合反向传播进行参数训练。随机梯度下降可以看Andrew NG的机器学习讲义,也可以百度一篇文章。不过TensorFlow封装的比较好,所以只需要3句话就可以训练1000次,100是每次随机选择100个样本进行训练:

[python] view plaincopy
  1. <code class="language-python">for i in range(1000):</code>
  2. batch_xs, batch_ys = mnist.train.next_batch(100)
  3. sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

TensorFlow教程第一章用了一个十分简单的网络结构,重点讲了如何设定网络,如何训练,如何计算正确率。在下一章里面,教程会介绍如何用复杂一些的架构,取得更好的训练效果。

TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅相关推荐

  1. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  2. tensorflow学习笔记(八):LSTM手写体(MNIST)识别

    文章目录 一.LSTM简介 二.主要函数 三.LSTM手写体(MNIST)识别 1.MNIST数据集简介 2.网络描述 3.项目实战 一.LSTM简介 LSTM是一种特殊的RNN,很好的解决了RNN中 ...

  3. tensorflow学习笔记(七):CNN手写体(MNIST)识别

    文章目录 一.CNN简介 二.主要函数 三.CNN的手写体识别 1.MNIST数据集简介 2.网络描述 3.项目实战 一.CNN简介 一般的卷积神经网络由以下几个层组成:卷积层,池化层,非线性激活函数 ...

  4. tensorflow学习笔记(十):GAN生成手写体数字(MNIST)

    文章目录 一.GAN原理 二.项目实战 2.1 项目背景 2.2 网络描述 2.3 项目实战 一.GAN原理 生成对抗网络简称GAN,是由两个网络组成的,一个生成器网络和一个判别器网络.这两个网络可以 ...

  5. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  6. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  7. TensorFlow学习笔记--第三节张量(tensor)及其定义方法

    目录 在TensorFlow中,所有的数据通过张量的形式来表示 1张量及属性: 1.1维数(阶) 1.2 形状 1.3数据类型 TensorFlow 支持以下三种类型的张量: **1.常量** **2 ...

  8. Mysql 学习笔记(快速复习)

    Mysql 学习笔记(快速复习) 一.MySQL 基础 1.数据库连接工具 1.1.Navicat 使用教程 2.DDL 操作数据库 2.1.创建新数据库 2.2.删除数据库 2.3.使用数据库 3. ...

  9. wxpython应用程序对象与顶级窗口_wxPython学习笔记(二)

    如何创建和使用一个应用程序对象? 任何wxPython应用程序都需要一个应用程序对象.这个应用程序对象必须是类wx.App或其定制的子类的一个实例.应用程序对象的主要目的是管理幕后的主事件循环. 父类 ...

最新文章

  1. s-sed替换或者修改文件指定行,同时匹配多个字符串,替换换行符为指定字符
  2. 精通python能干嘛-很多人说精通Python?对于精通我们存在哪些误区
  3. Unity 2D游戏开发教程之2D游戏的运行效果
  4. 关于SVG文件在Firefox中正确显示的研究
  5. html语言基础tr,HTML tr 标签
  6. 简洁css竖型tab选项卡(用)
  7. MySQL_自定义函数
  8. 图像处理VintaSoftImaging.NET SDK控件发布v7.0版本
  9. Oracle DB_LINK如何使用
  10. 微信小程序云开发教程-云开发对微信小程序带来的变革作用
  11. B - 好数 51Nod - 1717
  12. Java虚拟机类加载机制--类加载的过程详解
  13. VS编译的程序设置----需要以管理员身份打开
  14. Arch Linux配置gnome桌面
  15. 支付宝芝麻信用分申请
  16. 酒店宾馆wifi无线上网认证,手机认证方式详解
  17. php 支付宝退款40004,接入支付宝支付 错误码4000,排查方法——开发记录
  18. WindowManagerService详述
  19. 第7-3课:K 最邻近算法(KNN)与手写数字识别
  20. Java包的简单理解

热门文章

  1. python百度关键词自动提交订单_Python小工具-根据输入关键字自动打开百度搜索结果的第一页...
  2. 基于keras 的神经网络股价预测模型
  3. 社会阶层及由此引起的社会动力学现象
  4. unity3d游戏开发第2版 pdf_学开发2个月,1个人做出个TapTap排行榜第4的游戏?
  5. 85. Leetcode 746. 使用最小花费爬楼梯 (动态规划-基础题)
  6. Leetcode 74. 搜索二维矩阵 (每日一题 20210907)
  7. Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)
  8. 线性代数笔记: Cholesky分解
  9. 文巾解题35. 搜索插入位置
  10. MATLAB编程经典程序 素数的判断,求0~100素数之和