TensorFlow和深度学习入门教程(TensorFlow and deep learning without a P

这篇博客是TensorFlow和深度学习的入门教程,通过训练神经网络识别手写数字,逐步讲解理论和实践。内容包括安装TensorFlow,1层神经网络,梯度下降,多层神经网络,训练技巧如学习率衰减和丢失信息(dropout),以及卷积神经网络。博客提供了一系列实验,帮助读者通过代码实践加深理解,最终目标是使模型的识别准确率达到99%。
摘要由CSDN通过智能技术生成
                                   
             

前言

上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把其PPT的参考学习资料给了我们, 这是codelabs上的教程:《TensorFlow and deep learning,without a PhD》
当然登入需要翻墙,我也顺带巩固下,做个翻译,不好之处请包含指正。

当然需要安装python,教程推荐使用python3。如果是Mac,可以参考博主的另外两片博文,Mac下升级python2.7到python3.6
Mac安装tensorflow1.0

好多专业词太难译了,查了下,大家有些都是不译的。
比如:dropout,learning rate decay,pkeep什么的。。。。

dropout这个词应该翻译成什么?


1. 概述

这里写图片描述
在这个codelab中,您将学习如何创建和训练识别手写数字的神经网络。一路上,随着你增强神经网络的准确率达到99%,你还将学习到专业人员用来训练模型的高效工具。

该codelab使用MNIST数据集,收集了60,000个标记的数字。你将学会用不到100行Python / TensorFlow代码来解决深度学习问题。

你会学到什么

  • 什么是神经网络和如何训练它
  • 如何使用TensorFlow构建基本的1层神经网络
  • 如何添加更多的神经网络层数
  • 训练技巧和窍门:过度拟合(overfitting),丢失信息(dropout),学习速率衰退(learning rate decay)…
  • 如何排查深层神经网络的故障
  • 如何构建卷积神经网络(convolutional networks)

你需要什么

  • Python 2或3(推荐Python 3)
  • TensorFlow
  • Matplotlib(Python可视化库)

安装说明在实验室的下一步中给出。

如果你觉得这篇文章看起来稍微还有些吃力,或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程。非常棒的大神之作,教程不仅通俗易懂,而且很风趣幽默。点击这里可以查看教程。

2. 准备:安装TensorFlow,获取示例代码

在您的计算机上安装必要的软件:Python,TensorFlow和Matplotlib。这里给出了完整的安装说明:INSTALL.txt

从GitHub的信息库,克隆源代码(也可以直接登入这个网址,直接下载)

git clone https://github.com/martin-gorner/tensorflow-mnist-tutorial
  
  
  
  
  
  
  • 1
  • 1
 

下载的文件夹中含多个文件。首先是让mnist_1.0_softmax.py运行起来。其他很多文件是用于加载数据和可视化结果的解决方案或支持代码。

当您启动初始python脚本时,您应该看到一个实时可视化的培训过程:

python3 mnist_1.0_softmax.py
  
  
  
  
  
  
  • 1
  • 1

如果python3 mnist_1.0_softmax.py不起作用,用python命令:

python mnist_1.0_softmax.py
  
  
  
  
  
  
  • 1
  • 1

这里写图片描述

疑难解答:如果无法使实时可视化运行,或者您只希望仅使用文本输出,则可以通过注释掉一行并取消注释另一行来取消激活可视化。请参阅下载文件的底部的说明。

 

为TensorFlow构建的可视化工具是TensorBoard。其功能比我们本次教程中所需要的更多。它可以在远程服务器上跟踪您的分布式TensorFlow作业。对于我们在这个实验中我们只需要matplotlib的结果,能看到训练过程的实时动画,就当是个附带的奖励吧。但是,如果您需要使用TensorFlow进行跟踪工作,请确保查看TensorBoard。

3. 理论:训练神经网络

我们将首先观察正在接受训练的神经网络。代码将在下一节中进行说明,因此您先不需要看。

我们的用神经网络训练手写数字,并对它们进行分类,即将手写数字识别为0,1,2等等,最多为9。它的模型基于内部变量(“权重”(weights)和“偏差”(biases),这两个词稍后解释),只有将这些变量训练成正确值,分类工作才能正确进行,训练方式稍后也会详细解释。现在您需要知道的是,训练循环如下所示:

 

训练数据 => 更新权重和偏差 => 更好的识别      (循环这三步)

让我们逐个浏览可视化的六个面板,看看训练神经网络需要什么。
这里写图片描述
在这里,您可以看到100个训练数字被送入训练循环,注意是一次100个数字,这图显示的是这100个手写数据被训练的结果。在目前的训练状态下,神经网络已经能识别(包括白色背景和部分数字),当然也有些是识别错误的(图中红色背景的是计算机识别错误的手写数字,左侧小打印的数字是该书写字的正确标签,右侧小打印的数字是计算机标识别的错误标签)。

 

该数据集中有50,000个训练数字。我们在每次迭代中将其中每100个进行训练,因此系统将在500次迭代后看到所有数字被训练了一次。我们称之为“纪元(epoch)”。

这里写图片描述
为了测试训练好后模型的识别质量,我们必须使用系统在训练期间没有用到过的手写数字。否则,模型可能会识别所有已训练的数字,但仍然不能识别我刚才新写的数字“8”。MNIST数据集中包含10,000个测试手写数字。在这图里,您可以看到大约1000个数字,其中所有被识别错误的,都放在顶部(红色背景上)。图左侧的比例可以大致表示分类器的准确性。

这里写图片描述
为了开展训练,我们将定义一个损失函数,即代表系统识别数字的程度值,并尝试将其最小化。损失函数的选择(这里是“交叉熵(cross-entropy)”)将在后面解释。您在这里看到的是,随着训练的进展,训练和测试数据的损失都会下降:这是好的。这意味着神经网络正在学习。X轴表示通过学习循环的迭代次数。

这里写图片描述
准确性只是正确识别的数字的百分比。这是在训练和测试集上计算的。如果训练顺利,你会看到它上升。
这里写图片描述

最后两个图代表了内部变量采用的所有值的范围,即随着训练的进行,权重和偏差。在这里,您可以看到,偏差最初从0开始,最终获得的值大致均匀分布在-1.5和1.5之间。如果系统不能很好地收敛,这些图可能很有用。如果你看到权重和偏差扩展到100或1000,训练可能就有问题了。

图中的方格代表是百分位数。有7个频带,所以每个频带是100/7 =所有值的14%。

Keyboard shortcuts for the visualisation GUI:
1 ……… display 1st graph only
2 ……… display 2nd graph only
3 ……… display 3rd graph only
4 ……… display 4th graph only
5 ……… display 5th graph only
6 ……… display 6th graph only
7 ……… display graphs 1 and 2
8 ……… display graphs 4 and 5
9 ……… display graphs 3 and 6
ESC or 0 .. back to displaying all graphs
SPACE ….. pause/resume
O ……… box zoom mode (then use mouse)
H ……… reset all zooms
Ctrl-S …. save current image

 

什么是“ 权重 ”和“ 偏差 ”?如何计算“ 交叉熵 ”?训练算法究竟如何工作?那么来看下一节内容吧。

4. 理论:1层神经网络

这里写图片描述
MNIST数据集中的手写数字是28x28像素的灰度图像。对于它们进行分类的最简单方法是使用28x28 = 784像素作为第1层神经网络的输入。
这里写图片描述
神经网络中的每个“神经元”都会对其所有输入进行加权和,增加一个称为“偏差”的常量,然后通过一些非线性激活函数来提取结果。

在这里,我们设计了一个具有10个神经元的1层神经网络,作为输出层,因为我们想将数字分为10个类(0到9),每个神经元都能分类处一个类。

对于一个分类问题,一个很好的激活函数是softmax。通过取每个元素的指数,然后归一化向量(使用任何范数,例如向量的普通欧几里德长度)来对向量应用softmax。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值