Coder Social home page Coder Social logo

dl-from-scratch's Introduction

《深度学习入门:基于PyTorch和TensorFlow的理论与实战》

作者:红色石头

出版社:清华大学出版社

19世纪70 年代,电力的发明和应用掀起了第二次工业化高潮,从此改变了人们的生活方式,大大提高了人类的科技水平。现如今,深度学习(Deep Learning)技术也正在发挥同样的作用。纵观这近几年,深度学习发展非常迅速,发展势头一直高歌猛进。毫无疑问,深度学习技术正在影响着我们的日常生活和行为方式。

深度学习怎么学

深度学习怎么学?事实上,很多初学者常常会误入两大误区:一是找不到一本真正适合自己的教材或书本来学习,陷入到海量资源中手足无措;二是受制于数学理论知识,自认为数学基础不好而影响学习的主观性和积极性。

这两大误区很容易让初学者陷入到一种迷茫的状态。所以,第一步就是要放弃海量资源,选择一份真正适合自己的资料,好好研读下去!第二步就是重视实践。深度学习涉及的理论知识很多,有些人可能基础不是特别扎实,就想着从最底层的知识开始学起,概率论、线性代数、凸优化理论等。但是这样做比较耗时间,而且容易打消学习的积极性。啃书本和推导公式相对来说是比较枯燥的,远不如自己搭建一个简单的神经网络模型更能激发学习积极性。当然,基础理论知识非常重要!只是说,在入门的时候,最好先从顶层框架上有个系统的认识,然后再从实践到理论,有的放矢的查缺补漏深度学习知识点。从宏观到微观,从整体到细节,更有利于快速入门!

为什么写这本书

在学习深度学习的几年时间里,我学过一些国内外优秀的深度学习公开课程,口碑都很好;我也看过不少大牛老师写的高质量书籍,收获颇丰;我也在学习的过程中走过一些弯路,遇到一些坑,这些也是宝贵的经验。

我个人觉得,任何前沿技术,如深度学习,扎实的基础知识非常重要。而最好的基础知识的获取方式还是教材和书本。但是,反观现在一些深度学习方面的书籍,或多或少存在一些问题:

1、数学理论太多,公式多,起点高,对初学者不友善,容易削弱入门学习的积极性。

2、只讲深度学习框架,教你如何调包、调用库函数,不讲深度学习理论知识。容易造成一知半解,沦为“调包侠”。

3、理论与实战的脱节,过于侧重理论或者过于侧重实战,二者之间没有很好的融合。

基于以上这些问题,我认为写一本真正适合深度学习初学者的入门书籍非常必要。这样的书籍不仅要兼顾理论和实战,还应该将重难点知识通俗化讲解、全面细致。难度有阶梯性,照顾不同水平的读者。这样的书籍才能最大程度地让读者受益。

基于这样的考量,《深度学习入门:基于PyTorch与TensorFlow的理论与实战》跟大家见面了。

本书特色

我刚刚也说了,对于初学者而言,一本好的深度学习书籍,宗旨就是让读者能够轻轻松松地掌握知识、触类旁通。本书作为一本深度学习的入门书籍,对初学者是非常友好的。本书的内容来自于我多年的知识积累和技术沉淀,也是我的一份深度学习经验总结。

首先,这本书包含了Python的基本介绍。Python作为人工智能的首选语言,其重要性不言而喻。Python入门非常简单,本书将会对深度学习中所需的基本Python语法知识进行简明扼要的提炼和概括。如果有的读者之前没有接触过Python,那么本书将轻松带你入门。

其次,这本书介绍了如今主流的深度学习框架PyTorch和TensorFlow。通过本书,读者可以对这两个框架的基本语法和基础知识有一个系统的学习,夯实基础。如果你之前对PyTorch和TensorFlow不了解也没有关系,这本书也可以是这两个框架的知识学习手册。

然而,最重要的,这是一本关于深度学习的入门教程。我在编写该书的时候,从小白的视角出发,结合我多年的知识和经验,尽量将深度学习、神经网络的理论知识用通俗易懂的语言描绘出来。这本书能让读者真正了解、熟悉神经网络的结构和优化方法,也能帮助读者梳理一些容易被忽视的技术细节。例如最简单的梯度下降算法,它的公式来源和理论支持是什么?本书都会有详细的解释。

值得注意的是,我一贯的坚持是将复杂的理论简单化,这本书会将理论以平易化的语言描述清楚,但不会深陷于数学公式之中。这本书面向的深度学习的入门者和初学者,不会涉及太多太复杂的理论知识。因为入门深度学习,前期整体上的感性认识尤为重要。轻松入门,往往是比较正确的学习路线。我在编写该书的时候,也一直在把握这个分寸和尺度。如果想要学习更深层次、更高级的深度学习知识,读者可以查阅更多的书籍、会议论文、前沿技术等。 除此之外,深度学习更重要的是代码实践,这也是本书一直秉承的一个重点。这本书的另一个优势就是不仅讲理论知识,也配备了完整的实战项目和代码。从简单的逻辑回归,到浅层神经网络、深层神经网络,再到CNN、RNN,都会通过一个实际项目从零搭建神经网络,或者使用PyTorch、TensorFlow来构建更复杂的例如CNN、RNN模型解决问题。

本书的所有代码,我都开源放在了GitHub上,地址如下:

https://github.com/RedstoneWill/dl-from-scratch

面向的读者

这是一本深度学习的入门书籍,也是一本关于Python、PyTorch、TensorFlow的工具手册;这是一本深度学习的理论书籍,也是一本教你如何编写代码构建神经网络的实战手册。我希望这本书能够帮助更多想要入门深度学习的爱好者,能够帮助读者扫清学习过程中的障碍,再上新台阶。

本书面向的读者包括:深度学习初学者; 对深度学习感兴趣的在校大学生; 有意向转行AI领域的IT从业人员。当然,这本书也是不错的深度学习工具手册,里面不仅有理论知识,也有示例代码。

值得一提的是,如果你已经有很高的深度学习水平了,那么可能本书不太适合你,你应该更关注深度学习的前沿理论和论文。

关于作者

红色石头,北京大学硕士。专注AI领域多年,爱好写作,累计写过的AI领域的原创文章超过150篇,累计读者达20W,文章阅读量超100W。写作风格是擅长以通俗化的语言来解释机器学习、深度学习的算法理论和技术细节。

个人网站:www.redstonewill.com

创办了AI技术领域的微信公众号:AI 有道(ID:redstonewill),欢迎读者关注,方便第一时间获取机器学习、深度学习等有价值的干货分享和信息资源。

书籍目录

第1章 深度学习基础 1

  • 1.1 深度学习概述 1

    • 1.1.1 什么是深度学习 1

    • 1.1.2 深度学习的应用场景 3

    • 1.1.3 深度学习的发展动力 4

    • 1.1.4 深度学习的未来 5

  • 1.2 Python入门 6

    • 1.2.1 Python简介 6

    • 1.2.2 Python的安装 7

    • 1.2.3 Python基础知识 8

    • 1.2.4 NumPy矩阵运算 15

    • 1.2.5 Matplitlib绘图 20

  • 1.3 Anaconda与Jupyter Notebook 24

    • 1.3.1 Anaconda 25

    • 1.3.2 Jupyter Notebook 27

第2章 PyTorch 34

  • 2.1 PyTorch简介 34

    • 2.1.1 什么是PyTorch 34

    • 2.1.2 为什么使用PyTorch 35

  • 2.2 PyTorch安装 36

  • 2.3 张量Tensor 39

    • 2.3.1 创建Tensor 39

    • 2.3.2 Tensor的数学运算 40

    • 2.3.3 Tensor与NumPy 41

    • 2.3.4 CUDA Tensor 42

  • 2.4 自动求导 autograd 43

    • 2.4.1 返回值是标量 43

    • 2.4.2 返回值是张量 44

    • 2.4.3 禁止自动求导 45

  • 2.5 神经网络包nn和优化器optim 45

    • 2.5.1 torch.nn 45

    • 2.5.2 torch.optim 46

  • 2.6 PyTorch线性回归 47

    • 2.6.1 线性回归基本原理 48

    • 2.6.2 PyTorch实现 49

第3章 TensorFlow 53

  • 3.1 TensorFlow简介 53

    • 3.1.1 什么是TensorFlow 53

    • 3.1.2 为什么使用TensorFLow 54

  • 3.2 TensorFlow安装 54

  • 3.3 张量Tensor 56

    • 3.3.1 创建Tensor 56

    • 3.3.2 Tensor的数学运算 57

  • 3.4 数据流图 58

  • 3.5 会话Session 60

  • 3.6 TensorFlow线性回归 62

  • 3.7 TensorBoard 66

    • 3.7.1 TensorBoard代码 66

    • 3.7.2 TensorBoard显示 67

第4章 神经网络基础 71

  • 4.1 感知机 71

    • 4.1.1 感知机模型 71

    • 4.1.2 感知机与逻辑电路 72

  • 4.2 多层感知机 77

    • 4.2.1 感知机的局限性 78

    • 4.2.2 多层感知机实现异或 79

  • 4.3 逻辑回归 81

    • 4.3.1 基本原理 82

    • 4.3.2 损失函数 84

    • 4.3.3 梯度下降 87

    • 4.3.4逻辑回归的Python实现 92

第5章 神经网络 98

  • 5.1 基本结构 98

  • 5.2 前向传播 100

  • 5.3 激活函数 101

  • 5.4 反向传播 106

  • 5.5 更新参数 108

  • 5.6 初始化 108

  • 5.7 神经网络的Python实现 109

    • 5.7.1 准备数据 109

    • 5.7.2 参数初始化 110

    • 5.7.3 前向传播 111

    • 5.7.4 交叉熵损失 112

    • 5.7.5 反向传播 113

    • 5.7.6 更新参数 114

    • 5.7.7 构建整个神经网络模型 115

    • 5.7.8 训练 116

    • 5.7.9 预测 116

第6章 深层神经网络 119

  • 6.1 神经网络为什么要深 119

  • 6.2 符号标记 121

  • 6.3 前向传播与反向传播 122

  • 6.4 多分类Softmax 125

    • 6.4.1 Softmax基本原理 126

    • 6.4.2 Softmax损失函数 127

    • 6.4.3 Softmax求导 128

  • 6.5 深层神经网络的Python实现 130

    • 6.5.1 准备数据 130

    • 6.5.2 参数初始化 133

    • 6.5.3 前向传播 134

    • 6.5.4 交叉熵损失 137

    • 6.5.5 反向传播 137

    • 6.5.6 更新参数 140

    • 6.5.7 构建整个神经网络 141

    • 6.5.8 训练与预测 143

第7章 优化神经网络 146

  • 7.1 正则化 146

    • 7.1.1 什么是过拟合 146

    • 7.1.2 L1和L2正则化 149

    • 7.1.3 Dropout正则化 153

    • 7.1.4 其它正则化技巧 157

  • 7.2 梯度优化 159

    • 7.2.1 BGD、SGD、MBGD 159

    • 7.2.2 Momentum GD 163

    • 7.2.3 Nesterov Momentum 165

    • 7.2.4 AdaGrad 166

    • 7.2.5 RMSprop 167

    • 7.2.6 Adam 168

    • 7.2.7 Learning Rate Decay 169

  • 7.3 网络初始化与超参数调试 170

    • 7.3.1 输入标准化 171

    • 7.3.2 权重参数初始化 173

    • 7.3.3 批归一化 176

    • 7.3.4 超参数调试 179

  • 7.4 模型评估与调试 183

    • 7.4.1 模型评估 183

    • 7.4.2 训练/验证/测试集 184

    • 7.4.3 偏差与方差 187

    • 7.4.4 错误分析 187

第8章 卷积神经网络 192

  • 8.1 为什么选择CNN 192

  • 8.2 CNN基本结构 193

  • 8.3 卷积层 194

    • 8.3.1 卷积 194

    • 8.3.2 边缘检测 196

    • 8.3.3 填充Padding 198

    • 8.3.4 步幅Stride 199

    • 8.3.5 CNN卷积 200

    • 8.3.6 卷积层的作用 205

  • 8.4 池化层 205

  • 8.5 全连接层 208

  • 8.6 CNN模型 210

  • 8.7 典型的CNN模型 213

    • 8.7.1 LeNet-5 213

    • 8.7.2 AlexNet 214

  • 8.8 CNN的PyTorch实现 215

    • 8.8.1 准备数据 215

    • 8.8.2 定义CNN模型 219

    • 8.8.3 损失函数与梯度优化 221

    • 8.8.4 训练模型 221

    • 8.8.5 测试模型 223

  • 8.9 CNN的TensorFlow实现 224

    • 8.9.1 准备数据 224

    • 8.9.2 定义CNN模型 225

    • 8.9.3 损失函数与优化算法 227

    • 8.9.4 训练并测试 228

第9章 循环神经网络 229

  • 9.1 为什么选择RNN 229

  • 9.2 RNN基本结构 230

  • 9.3 模型参数 232

  • 9.4 梯度消失 234

  • 9.5 GRU 234

  • 9.6 LSTM 236

  • 9.7 多种RNN模型 237

  • 9.8 RNN的PyTorch实现 241

    • 9.8.1 准备数据 242

    • 9.8.2 定义RNN模型 244

    • 9.8.3 损失函数与梯度优化 246

    • 9.8.4 训练模型 246

    • 9.8.5 测试模型 247

  • 9.9 RNN的TensorFlow实现 248

    • 9.9.1 准备数据 249

    • 9.9.2 定义RNN模型 249

    • 9.9.3 损失函数与优化算法 250

    • 9.9.4 训练并测试 251

后记 252

源代码目录

dl-from-scratch's People

Contributors

redstonewill avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.