前言
有人调侃我们说:
- 程序员不如送外卖。送外卖是搬运食物,自己是搬运代码,都不产出新的东西……
- 透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险……
- 想跳槽,但是更高的平台难进,同级别的平台又是重复……
- 想利用业余时间学习提升,但是自己能力有限,很难形成知识体系…
这些其实都是初级程序员面临的困境,当你提高自身能力,登上更高的层级之后,无论薪资还是发展都会有很大的提升。
那么问题来了,怎么才能度过初级程序员的瓶颈,进阶成为高薪工程师呢?
我们正处在一个日新月异、飞速变革的时代,层出不穷的新技术每天都在冲击和改变我们的生活。人工智能无疑是其中最受关注、也是影响最深远的技术领域。它为计算机插上了翅膀,演变出许多从前根本无法想象的新技术、新应用。
AlphaGo Zero一台没有任何先验知识的人工智能机器,可以在几天内通过自我博弈成长为世界第一的围棋大师,超越人类几千年积累的经验;风格迁移应用能够自动将用户的照片转变为著名的绘画艺术风格;机器可以在零点几秒内完成翻译,把一种语言译成另一种语言。此外,有关人脸识别、自动驾驶等新技术的应用也都纷纷开始落地。在过去的几年内,人工智能技术不仅在学术上取得了巨大的突破,也开始走向寻常百姓家,真正为人们的生活提供便利。
本文主要为读者介绍这次人工智能浪潮最重要的组成部分一深度学习技术,使用的编程框架是Google公司的TensorFlow。 借助于Google公司巨大的影响力,TensorFlow一-经发布就引起了广泛的关注。
本文的主要特点如下:
●以实践、应用导向。深度学习需要深厚的数理基础,对于初学者来说有一定难度 。本书希望从实践出发,用具体的例子来引导读者学习深度学习技术和TensorFlow编程技巧。我们主要从实用性和趣味性两个方面考量,选择了21个实践项目,其中既有MNIST图像识别入门项目,也有目标检测、人脸识别、时间序列预测实用性项目,还有一些诸如 DeepDream趣味性项目。读者可以在实践中找到乐趣,逐渐进步,让学习深度学习和TensorFlow的过程不再那么痛苦。
●清晰而有深度的介绍。在编写过程中,尽量用简单的语言描述算法的原理,做到清晰而有条理。此外,深度学习是一门]还在快速发展的新技术,限于篇幅,很多内容不能完全展开,在大部分章节的末尾列出了“拓展阅读”材料,有兴趣的读者可以参考进一步学习。
●基于TensorFlow 1.4及以上版本。TensorFlow的发展非常迅速,本书代码全部基于TensorFlow 1.4及以上版本(包括1.4.0、1.4.1和1.5.0),并介绍了TensorFlow的一些新特性,如Time Series模块( 1.3 版本添加)新的MultiRNNCell函数( 1.2版本更改)等。本书的代码会在如下GitHub地址上提供,并会随新的TensorFlow版本的发布而同步更新
:htps:/github.com/hzy46/Deep- Learning-21-Examples。
如何阅读本文?
在阅读本文前,读者应当了解Linux系统的基本操作,并会使用Python进行简单的编程,还需具备基础的机器学习知识。本文的章节安排是依据读者对深度学习的了解循序渐进设立的,建议初学者从前至后阅读。由于深度学习和TensorFlow不易于理解,我建议读者分几遍阅读本文:
●第一遍先简单浏览一下,看一看书中都有哪些实践项目。当对基本的概向念有初步的理解时,就可以尝试配置一下开发环境。
●第二遍,从前至后阅读各章中算法的原理,并运行相应的实践项目。在这个过程中,希望读者能在自己动手的过程中找到学习的乐趣。读者可以对照源代码和书中的内容,深入学习各个模型的细节,此外还可以根据自己的需求对代码进行修改。本文会涉及大量TensorFlow中的函数,由于篇幅限制,不可能将每一个函数都介绍一遍,只介绍了比较重要的函数,读者可以参考TensorFlow的官方文档,查看其他函数的功能说明。
●第三遍,根据需要对照源程序看相关章节。此外,读者还可以参阅章节最后的拓展阅读进一步学习。最后,如果你是一名深度学习和TensorFlow的精通者,也可以根据需要直接跳读到相关章节,查阅你需要的内容。
因为本文内容包含的知识点实在是太多了,所以小编只把部分章节的知识点拿出来粗略的介绍了一下,每个小节里面都有更加细化的内容,大家仔细品读理解其中的真谛!!
目录
主要内容
本文以实践为导向,深入介绍了深度学习技术和TensorFlow框架编程内容。
通过本文,读者可以训练自己的图像识别模型、进行目标检测和人脸识别、完成一个风格迁移应用,还可以使用神经网络生成图像和文本,进行时间序列预测、搭建机器翻译引擎,训练机器玩游戏。
全文共包含21个项目,分为深度卷积网络、RNN网络、深度强化学习三部分,21章的内容。
读者可以在自已动手实践的过程中找到学习的乐趣,了解算法和编程框架的细节,让学习深度学习算法和TensorFlow的过程变得轻松和高效。
本文代码基于TensorFlow 1.4及以上版本,并介绍了TensorFlow中的一些新特性。
本文适合有一定机器学习基础的学生、研究者或从业者阅读,尤其是希望深入研究TensorFlow和深度学习算法的数据工程师,也适合对人工智能、深度学习感兴趣的在校学生,以及希望进入大数据应用的研究者。
第1章MNIST机器学习入门
当我们学习编程语言时,第一课通常会学习一个简单的“Hello World"程序,而MNIST手写字符识别可以算得上是机器学习界的“Hello World”。
MNIST是由Yann LeCun等人建立的一个手写字符数据集。它简单易用,是一个很好的入]范例。本章会以MNIST数据库为例,用TensorFlow读取数据集中的数据,并建立一个简单的图像识别模型,同时介绍TensorFlow 的几个核心概念。
第2章CIFAR-10与lmageNet图像识别
本章的主要任务还是图像识别,使用的数据集是CIFAR-10-- 这是 一个更接近普适物体的彩色图像数据集。主要通过CIFAR-10学习两方面的内容:一是TensorFlow中的数据读取原理,三是深度学习中数据增强的原理。最后还会介绍更加通用且复杂的ImageNet数据集和相应的图像识别模型。
第3章打造自己的图像识别模型
本章关注的重 点是如何使用TensorFlow 在自己的图像数据上训练深度学习模型,主要涉及的方法是对已经预训练好的ImageNet 模型进行微调( Fine-tune )。本章将会从四个方面讲解:数据准备、训练模型、在测试集上验证准确率、导出模型并对单张图片分类。
第4章Deep Dream模型
Deep Dream是Google公司在2015年公布的一项有趣的技术。在训练好的卷积神经网络中,只需要设定几个参数,就可以通过这项技术生成一张图像。生成出的图像不仅令人印象深刻,而且还能帮助我们理解卷积神经网络背后的运行机制。本章介绍Deep Dream的基本原理,并使用TensorFlow实现Deep Dream生成模型。
第5章深度学习中的目标检测
在前面的章节中,关注的大多数是图像识别问题:输入一张图像, 输出该图像对应的类别。本章将讨论目标检测问题。目标检测的输入同样是一张图像,但输出不单单是图像的类别,而是该图像中所含的所有目标物体以及它们的位置。通常使用矩形框来标识物体的位置,如图5-1所示。深度学习已经被广泛应用在目标检测问题.上,在性能上也远远超过了传统方法。本章会先介绍深度学习中的几个经典的目标检测方法,再以Google公司开源的TensorFlow Object Detection API为例,介绍如何在TensorFlow中进行目标检测。
第6章人脸检测和人脸识别
人脸检测( Face Detection )和人脸识别技术是深度学习的重要应用之一。
本章首先会介绍MTCNN算法的原理,它是基于卷积神经网络的一种高精度的实时人脸检测和对齐技术。接着,还会介绍如何利用深度卷积网络提取人脸特征,以及如何利用提取的特征进行人脸识别。最后会介绍如何在TensorFlow中实践上述算法。
第7章图像风格迁移
所谓图像风格迁移,是指利用算法学习著名画作的风格,然后再把这种风格应用到另外- -张图片上的技术。著名的图像处理应用Prisma 是利用风格迁移技术,将普通用户的照片自动变换为具有艺术家的风格的图片。本章会介绍这项技术背后的原理,此外,还会使用TensorFlow实现一个快速风格迁移的应用。
第8章GAN和DCGAN入门
GAN的全称为Generative Adversarial Networks,意为对抗生成网络。原始的GAN是一种无监督学习方法,它巧妙地利用“ 对抗”的思想来学习生成式模型,一旦训练完成后可以生成全新的数据样本。DCGAN将GAN的概念扩展到卷积神经网络中,可以生成质量较高的图片样本。GAN和DCGAN在各个领域都有广泛的应用,本章会先向读者介绍它们的原理,再介绍如何在TensorFlow中使用DCGAN生成图像,关于GAN和DCGAN的更多项目会在接下来的章节中进行介绍。
第9章pix2pix模型与自动上色技术
前一章介绍了GAN的基本原理以及如何使用GAN来生成样本,还有用于生成图像样本的一种特殊的GAN结构一- -DCGAN。本章 会介绍cGAN,与原始GAN使用随机噪声生成样本不同,cGAN可以根据指定标签生成样本。接着会介绍pix2pix模型,它可以看作是cGAN的一种特殊形式。最后会做一个实验:在TensorFlow中使用pix2pix 模型对灰度图像自动上色。
第10章分辨率:如何让图像变得更清晰
所谓超分辨率,就是指用某种方法提高图像的分辨率,从而让图像变得更加清晰。本章会使用上一章的pix2pix项目代码实现简单的4倍超分辨率重建,此外还会深入讲解pix2pix的代码实现。
第11章CycleGAN与非配对图像转换
前面已经介绍过了cGAN和对应的pix2pix模型,它们能够解决一类“图像翻译”问题。但是pix2pix模型要求训练样本必须是“严格成对”的,这种样本往往比较难以获得。本章会介绍CycleGAN, CycleGAN不必使用成对样本也可以进行“图像翻译”。还会介绍TensorFlow中CycleGAN的实现。
第12章RNN基本结构与Char RNN文本生成
从本章起,将开始学习循环神经网络( RNN)以及相关的项目。这一-章首先会向大家介绍RNN经典的结构,以及它的几个变体。接着将在TensorFlow中使用经典的RNN结构实现一个有趣的项目: Char RNN。CharRNN可以对文本的字符级概率进行建模,从而生成各种类型的文本。
第13章序列分类问题详解
在上一章中,主要介绍了RNN的几种结构,并且介绍了如何利用CharRNN进行文本生成。Char RNN对应着N VSN的RNN结构。在本章中,将专注于另一种RNN结构: N VS 1。这种结构的输入为序列,输出为类别,因此可以解决序列分类问题。常见的序列分类问题有文本分类、时间序列分类、音频分类等等。本章会使用TensorFlow制作- -个最简单的两类序列分类器。
第14章词的向量表示: word2vec与词嵌入
本章将暂时放下RNN的学习,聊- - 聊如何在TensorFlow中实现词嵌入。
所谓词嵌入,通俗来讲,是指将-一个词语(word)转换为一个向量(vector)表示,所以词嵌入有时又被叫作word2vec”。本章会先简单介绍为什么要把词转换为向量,接着会介绍两种词嵌入的方法CBOW和Skip-Gram,最后会以Skip-Gram为例,详细介绍怎么在TensorFlow中实现它。
第15章在TensorFlow中进行时间序列预测
常常会碰到各种各样时间序列预测问题,如商场人流量的预测、商品价格的预测、股价的预测,等等。TensorFlow 1.3版本新引入了一个TensorFlowTime Series 库(以下简称为TFTS),它可以帮助在TensorFlow中快速搭建高性能的时间序列预测系统,并提供包括AR、LSTM在内的多个模型。本章会通过实例的形式,详细地介绍TFTS库的使用方法。
第16章神经网络机器翻译技术
机器翻译是指用机器将一种语言自动翻译成另外一种语言的技术。传统的机器翻译一般采取基于规则或基于词组统计规律的方法。2013年以来,随着深度学习技术的发展,神经网络机器翻译( Neural Machine Translationn)技术开始兴起。与传统方法不同的是,神经网络机器翻译首先将源语言的句子向量化,转化成计算机可以“理解”的形式,再生成另一种语言的译文。
这种方法和人类的做法类似,可以产生更贴合原意也更加符合语法规范的翻译。目前,各大商业公司都开始使用神经网络机器翻译代替原来的机器翻译系统。
本章会首先介绍神经网络机器翻译技术的原理,再介绍如何使用TensorFlow NMT训练一个中英翻译引擎。
第17章看图说话:将图像转换为文字
所谓Image Caption,是指从图片中自动生成一段描述性文字 ,有点类似于小时候做过的“看图说话”。对于人来说,完成Image Caption是简单而自然的一件事,但对于机器来说,这项任务却充满了挑战性。原因在于,要完成Image Caption,机器不仅要能检测出图像中的物体,而且要理解物体之间的相互关系,最后还要用合理的语言表达出来,这里面每一个步 骤都颇具难度。
本章将首先介绍Image Caption 的几篇经典的论文,接着会介绍Google公司官方的TensorFlow实现。
第18章强化学习入门之Q
从本章开始,将开始学习强化学习( Reinforcement Learning )以及相关的实践案例。强化学习是机器学习的一个重要分支,它主要研究如何在环境中做出合适的动作以最大化某些奖励。这一章将会用一个简单的例子介绍强化学习的基本概念,以及一个基础算法一-Q Learning。
第19章强化学习入门之SARSA算法
SARSA(
State-Action-Reward-State-Action )算法同样是一种基本的强化学习的算法。它同Q Learning一样,都是在智能体行动过程中迭代式地学习Q函数,但是SARSA算法采取了和Q Learning不同的迭代更新策略。本章将通过修改上一章的程序来实现SARSA算法。
第20章深度强化学习: Deep Q Learning
在前面的章节中,学习了强化学习的两个基础算法: Q Learning 和SARSA。
本章将介绍Q Learning的升级版: Deep Q Network,简称DQN。DQN算法采用深度神经网络来表示2函数,通常也被称为Deep Q Learming,即“深度Q Learning算法”。在这一章中,会先介绍DQN算法的原理,再来介绍DQN算法的TensorFlow实现。
第21章策略梯度(Policy Gradient) 算法
不管是Q Learning算法、SARSA算法,还是Deep Q Learning,它们本质上都是学习一个价值函数Q(state, action)。 在环境中决策时,需要首先确定当前的状态,然后根据Q(state, action)选择一 个价值比较高的动作执行 。
本章要讲的策略梯度( Policy Gradient )方法和以上做法不同,它不再去学习价值函数Q,而是直接通过模型(如神经网络)输出需要采取的动作。在本章中,会先介绍策略梯度算法的原理,然后介绍如何使用TensorFlow 实现它。
总结
本文以TensorFlow为工具,从基础的MNIST手写体识别开始,介绍基础的卷积神经网络、循环神经网络,包括正处于前沿的对抗生成网络、深度强化学习等课题。
本文中所有内容由21个可以动手实验的项目组织起来,并在其中穿插TensorFlow的教学内容,让读者可以在实践中轻松地入门深度学习,掌握TensorFlow的使用方法,并积累丰富的深度学习实战经验!!!
通过本文,可以学到:
- 在动手实践中快速进入深度学习领域。
- 通过实验快速掌握TensorFlow的操作方法。
- 掌握卷积神经网络、循环神经网络、对抗生成网络和深度强化学习等知识。
- 积累丰富的深度学习实战项目,如图像分类、目标检测、人脸识别、图像生成、文本生成、序列分类、时间序列预测等。
- 学习TensorFlow的一些新特性,如Time Series 模块、RNNCell等。