深度学习入门笔记系列 ( 二 )

本系列将分为 8 篇 。今天是第二篇 。主要讲讲 TensorFlow 框架的特点和此系列笔记中涉及到的入门概念 。

1.Tensor 、Flow 、Session 、Graphs

TensorFlow 从单词上可以分成 Tensor 和 Flow 两个单词 。Tensor 即张量 ,表明了其数据结构 ;Flow 翻译可理解为流 ,直观的表达了张量之间通过计算相互转化的过程 ;还有一个很重要的概念 Session ,即对话的概念 ,用于执行定义好的运算 。简单的理解 ,Flow 体现了 TF 框架的计算模型 ;Tensor 体现了 TF 框架的数据模型 ;二者可组织数据和定义相应的运算 ,并用图(graphs)表示计算任务 。图(graphs)中的节点称之为op(operation),一个op获得0个或多个Tensor 。而对话则是用于执行定义好的运算 ,即运算都是在 session 中执行的 。

上述介绍结构见下图 ,搭配起来就比较好理解了 。

值得一提的是运算的执行在会话中进行 ,如何进行有两种方式 ,一个是明确调用会话生成和关闭 。另一个是利用 with 上下文管理器 。这里建议利用 python 上下文管理器的机制 ,将所有的计算放在“with”内部即可 ,这样一来 ,当上下文管理器退出时候会自动释放所有资源 ,这样既解决了因为异常退出时资源释放的问题 ,还解决了忘记调用 session.close 函数产生的资源泄露 。上述介绍举例如下 :

2.loss function

首先得了解什么是代价函数 ,也可以是说是损失函数 。指的是一个可以衡量预测值和真实值差异的函数 ,具体形式可以有多种选择 。我们可以用 C(ω) 表示代价函数 ,根据其意义 ,不难理解代价函数有如下性质 :

  1. 对于每种算法来说 ,代价函数不是唯一的 ;
  2. 代价函数是参数 ω 的函数 ;
  3. 总的代价函数可以用来评价模型的好坏 ,代价函数越小说明模型和参数越符合训练样本 (x, y) ;
  4. 代价函数是一个标量 ;

常用的代价函数有如下几种 :

  1. 二次代价函数(quadratic cost)
  1. 交叉熵代价函数(cross-entropy)
  1. 对数释然代价函数(log-likelihood cost)

总的来说 ,我们在训练过程中 ,目标就是通过训练使得代价函数尽可能降低 ,从而使得预期输出和实际输出接近 。

3.欠拟合和过拟合

在我们机器学习或者训练深度神经网络的时候经常会出现欠拟合和过拟合这两个名词 。首先欠拟合是指模型没能较好的捕捉到数据特征 ,不能够较理想的拟合数据 ;相对的 ,过拟合就是模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了 ,导致在后期测试的时候不能够很好地识别数据 ,即不能正确的分类 ,模型泛化能力太差 。如下图所示(来源于吴恩达老师课程)

模型训练之初 ,往往是欠拟合的 ,所以我们才有进步空间 ,不断调整算法使得模型能够较好的拟合数据 。欠拟合的解决方法大体有下面几种思路 。

  1. 添加其他特征项 ,有时候我们模型出现欠拟合的时候是因为特征项不够导致的 ,可以添加其他特征项来很好地解决 。
  2. 添加多项式特征 ,这个在机器学习算法里面用的很普遍 ,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强 。例如上面的图片的例子 。
  3. 减少正则化参数 ,正则化的目的是用来防止过拟合的 ,但是现在模型出现了欠拟合 ,则需要减少正则化参数 。

至于过拟合 ,可以想象一个很复杂的网络 ,包含参数相当的多 ,但是我们用于训练的数据却相对有限 。反复的训练之下 ,模型学习太过彻底 。如上图过拟合图中在训练集上十分精确 ,但是在测试集中却得不到较理想的结果 ,即模型的泛化能力很差 。常见的解决办法如下 :

  1. 重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
  2. 增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
  3. 采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。
  4. 采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。

本篇较为干燥 ,小詹自己写的都看不下去了 。但是上边提到的一些概念是本系列文章中会用得到的 ,比如过拟合的一些处理在 mnist 识别分类中就可以用上 。所以为了方便查看理解 ,还是枯燥一点写(读)下去吧 ,如果有纰漏 ,敬请批评指正 。

原文发布于微信公众号 - 小詹学Python(xiaoxiaozhantongxue)

原文发表时间:2018-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序生活

理解LSTM网络(整合)Recurrent Neural Networks长期依赖(Long-Term Dependencies)问题LSTM 网络GRU - Gated Recurrent Unit

1722
来自专栏机器学习算法与Python学习

【源码分享】机器学习之Python支持向量机

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 在写代码前,先简单的过一下SV...

44010
来自专栏Python疯子

python人工智能:完整的图片识别(非图片验证码),以及模型的使用

这个可以说是一个绝对的福利中的福利。一整套的AI图片识别以及模型的使用。 一直都在说人工智能,图像识别,又有几个人会呢,网上文章成山,前一段时间因工作需要,我...

1401
来自专栏CVer

TensorFlow和深度学习入门教程

英文原文:https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/#0 C...

3858
来自专栏Python疯子

python人工智能:完整的图片识别(非图片验证码),以及模型的使用

这个可以说是一个绝对的福利中的福利。一整套的AI图片识别以及模型的使用。 一直都在说人工智能,图像识别,又有几个人会呢,网上文章成山,前一段时间因工作需要,我一...

2052
来自专栏AI科技大本营的专栏

如何在Python中用LSTM网络进行时间序列预测

Matt MacGillivray 拍摄,保留部分权利 翻译 | AI科技大本营(rgznai100) 长短记忆型递归神经网络拥有学习长观察值序列的潜力。它似...

9764
来自专栏自学笔记

聚类算法

p=2时就说平时计算的几何距离,当p趋向于正无穷的时候,其实求的就不是x,y的距离了,而是求x y中最长的一个了。因为如果x大于y,在指数增长下x回远大于y,所...

2922
来自专栏机器学习算法与Python学习

长文 | LSTM和循环神经网络基础教程(PDF下载)

目录: 前言 前馈网络回顾 循环网络 时间反向传播BPTT 梯度消失与梯度爆炸 长短期记忆单元(LSTM) 多时间尺度和远距离依赖 门控循环单元GRU LSTM...

51210
来自专栏CreateAMind

adam神经网络优化算法简介

以下内容摘自 http://www.cnblogs.com/xinchrome/p/4964930.html

1993
来自专栏专知

手把手教你用RNN做情感分析—初学者指南(附代码)

【导读】情感分析是NLP中最常见的应用之一,作者在博文中把情感分析建模成二分类问题,使用端到端的RNN网络建模,用Keras实现,简洁易懂,是学习RNN文本建模...

2535

扫码关注云+社区

领取腾讯云代金券