深度学习入门之PyTorch
  • 推荐3
  • 收藏6
  • 浏览2.2K

深度学习入门之PyTorch

廖星宇 (作者) 

  • 书  号:978-7-121-32620-2
  • 出版日期:2017-10-12
  • 页  数:232
  • 开  本:16(170*240)
  • 出版状态:上市销售
  • 维护人:孙学瑛
纸质版 ¥79.00

相关图书

深度学习核心技术与实践

邓澍军 (作者)

本书主要介绍深度学习的核心算法,以及在计算机视觉、语音识别、自然语言处理中的相关应用。本书的作者们都是业界第一线的深度学习从业者,所以书中所写内容和业界联系紧密...

¥119.00

疯狂Spring Cloud微服务架构实战

本书以Spring Cloud为基础,深入讲解微服务开发的相关框架,包括服务管理框架Eureka、负载均衡框架Ribbon、服务客户端Feign、容错框架Hys...

¥58.00

Java微服务实战

赵计刚 (作者)

本书分为三部分:基础框架篇(1~6章)、服务框架篇(7~10章)、监控部署篇(11~13章),由浅入深来讲解微服务的相关技术。基础框架篇从微服务架构的基本概念与...

¥69.00

套路!机器学习:北美数据科学家的私房课

林荟 (作者)

数据科学家目前是北美最热门的职业之一,平均年薪突破10万美元。但数据科学并不是一个低门槛的行业,除了对数学、统计、计算机等相关领域的技术要求以外,还要相关应用领...

¥68.00

用商业案例学R语言数据挖掘

经管之家 (作者)

商业智能时代已经全面到来,分析型人才的岗位数量在就业市场中呈现井喷式增长。无论是从事产品<br>研发的工程师,还是从事产品推广的市场人员、人力资源和财务会计人员...

¥69.00

Keras快速上手:基于Python的深度学习实战

本书系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列中的具体应用为案例,详细介绍...

 
深度学习如今已经成为了科技领域最炙手可热的技术,在本书中,我们将帮助你入门深度学习的领域。本书将从人工智能的介绍入手,了解机器学习和深度学习的基础理论,并学习如何用PyTorch框架对模型进行搭建。通过阅读本书,你将会学习到机器学习中的线性回归和logistic回归,深度学习的优化方法,多层全连接神经网络,卷积神经网络,循环神经网络以及生成对抗网络,同时从零开始对PyTorch进行学习,了解PyTorch基础及如何用其进行模型的搭建,最后通过实战了解最前沿的研究成果和PyTorch在实际项目中的应用。
用PyTorch入门深度学习,本书是不二之选!
随着AlphaGo 以3:1 的成绩战胜李世石,人们对人工智能的热情如井喷式增长,你
也许对人工智能充满兴趣,向往着了解机器学习,特别是深度学习,那么本书恰好能够
由浅及深地带你进入深度学习这个世界。
讲深度学习的书有很多,深度学习的框架也有很多,本书将以PyTorch 为工具从基
础的线性回归开始,讲到时下最前沿的生成对抗网络,并在其中穿插PyTorch 的教学,
所以本书不仅仅是深度学习的入门指南,同时也是PyTorch 的入门教程。
本书针对的对象是对深度学习有所了解、用过一些深度学习框架(如使用Tensor-
Flow 跑过简单的模型),但是希望能够用PyTorch 进行深度学习研究和学习的入门者。
阅读本书并不需要太多的数学基础,但是需要一定的Python 基础。本书中的数学推导
不多,感觉困难的读者可以跳过,这对理解全书的主要内容不会造成影响。
本书的主要内容包括:
第1 章,深度学习介绍;
第2 章,深度学习框架;
第3 章,多层全连接神经网络;
第4 章,卷积神经网络;
第5 章,循环神经网络;
第6 章,生成对抗网络;
第7 章,深度学习实战。
建议读者按照本书的内容顺序学习,因为后面的内容会以前面的内容为基础,另外
本书的全部代码放在了https://github.com/SherlockLiao/code-of-learn-deep-learning-withpytorch
中,读者可以前往下载。
本书面向的对象是初学者,学习完本书之后,读者能够大致了解深度学习的基本知
识,基本掌握PyTorch 的使用方法,知道如何根据实际问题搭建对应的深层网络结构,
并能够进行调参得到较好的结果。当然本书只是一本入门读物,如果希望以后从事该
领域的研究,仅靠此书是不够的,需要阅读更多专业的书籍和学术论文。
在本书的创作过程离不开很多人对我的帮助,书中的一部分内容参考了李飞飞教
授在斯坦福大学开设的课程cs231n,以及台湾国立大学教授李宏毅开始的MLDS,除此
之外还参考了网络上的一些图例,因为大多找不到出处,所以无法一一列出进行感谢。
除此之外,还感谢在写书的过程中我的家人对我的鼓励和信任,正是他们的支持
让我能够坚持写完整本书。
最后,感谢电子工业出版社给我这次机会让我能够出版此书,同时也感谢孙学瑛
编辑全程对我的帮助。
由于本人水平有限,书中存在的纰漏,欢迎大家向我指出,我也很高兴收到大家的
意见和建议,不胜感激。
廖星宇
中国科学技术大学数学系
E-mail:sherlockliao01@gmail.com

目录

第1 章深度学习介绍1
1.1 人工智能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 数据挖掘、机器学习与深度学习. . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 数据挖掘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 机器学习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3 深度学习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 学习资源与建议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
第2 章深度学习框架11
2.1 深度学习框架介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 PyTorch 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 什么是PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 为何要使用PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 配置PyTorch 深度学习环境. . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1 操作系统的选择. . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.2 Python 开发环境的安装. . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.3 PyTorch 的安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
第3 章多层全连接神经网络24
3.1 热身:PyTorch 基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Tensor(张量) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 Variable(变量) . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.3 Dataset(数据集) . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.4 nn.Module(模组) . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.5 torch.optim(优化) . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.6 模型的保存和加载. . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 线性模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.2 一维线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.3 多维线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.4 一维线性回归的代码实现. . . . . . . . . . . . . . . . . . . . . . 35
3.2.5 多项式回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3 分类问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.2 Logistic 起源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.3 Logistic 分布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.4 二分类的Logistic 回归. . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.5 模型的参数估计. . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.3.6 Logistic 回归的代码实现. . . . . . . . . . . . . . . . . . . . . . . 45
3.4 简单的多层全连接前向网络. . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4.1 模拟神经元. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4.2 单层神经网络的分类器. . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.3 激活函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.4 神经网络的结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4.5 模型的表示能力与容量. . . . . . . . . . . . . . . . . . . . . . . . 55
3.5 深度学习的基石:反向传播算法. . . . . . . . . . . . . . . . . . . . . . . 57
3.5.1 链式法则. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.5.2 反向传播算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.5.3 Sigmoid 函数举例. . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.6 各种优化算法的变式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.1 梯度下降法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.2 梯度下降法的变式. . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.7 处理数据和训练模型的技巧. . . . . . . . . . . . . . . . . . . . . . . . . 64
3.7.1 数据预处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.7.2 权重初始化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.7.3 防止过拟合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.8 多层全连接神经网络实现MNIST 手写数字分类. . . . . . . . . . . . . . 69
3.8.1 简单的三层全连接神经网络. . . . . . . . . . . . . . . . . . . . . 70
3.8.2 添加激活函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.8.3 添加批标准化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.8.4 训练网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
第4 章卷积神经网络76
4.1 主要任务及起源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.2 卷积神经网络的原理和结构. . . . . . . . . . . . . . . . . . . . . . . . . 77
4.2.1 卷积层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.2.2 池化层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.2.3 全连接层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.2.4 卷积神经网络的基本形式. . . . . . . . . . . . . . . . . . . . . . 85
4.3 PyTorch 卷积模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.3.1 卷积层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.3.2 池化层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.3.3 提取层结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.3.4 如何提取参数及自定义初始化. . . . . . . . . . . . . . . . . . . . 91
4.4 卷积神经网络案例分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.4.1 LeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.4.2 AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.4.3 VGGNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.4.4 GoogLeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.4.5 ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.5 再实现MNIST 手写数字分类. . . . . . . . . . . . . . . . . . . . . . . . . 103
4.6 图像增强的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.7 实现cifar10 分类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
第5 章循环神经网络111
5.1 循环神经网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.1.2 循环神经网络的基本结构. . . . . . . . . . . . . . . . . . . . . . 112
5.1.3 存在的问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.2 循环神经网络的变式:LSTM 与GRU . . . . . . . . . . . . . . . . . . . . 116
5.2.1 LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.2.2 GRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.3 收敛性问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5.3 循环神经网络的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . . 122
5.3.1 PyTorch 的循环网络模块. . . . . . . . . . . . . . . . . . . . . . . 122
5.3.2 实例介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5.4 自然语言处理的应用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
5.4.1 词嵌入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
5.4.2 词嵌入的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . . 133
5.4.3 N Gram 模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.4.4 单词预测的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . 134
5.4.5 词性判断. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.4.6 词性判断的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . 137
5.5 循环神经网络的更多应用. . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.5.1 Many to one . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.5.2 Many to Many(shorter) . . . . . . . . . . . . . . . . . . . . . . . 141
5.5.3 Seq2seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.5.4 CNN+RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
第6 章生成对抗网络144
6.1 生成模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.1.1 自动编码器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
6.1.2 变分自动编码器. . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
6.2 生成对抗网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.1 何为生成对抗网络. . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.2 生成对抗网络的数学原理. . . . . . . . . . . . . . . . . . . . . . 160
6.3 Improving GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
6.3.1 Wasserstein GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
6.3.2 Improving WGAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
6.4 应用介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.1 Conditional GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.2 Cycle GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
第7 章深度学习实战173
7.1 实例一——猫狗大战:运用预训练卷积神经网络进行特征提取与预测. 173
7.1.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.1.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.1.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
7.1.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.2 实例二——Deep Dream:探索卷积神经网络眼中的世界. . . . . . . . . 183
7.2.1 原理介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
7.2.2 预备知识:backward . . . . . . . . . . . . . . . . . . . . . . . . . 185
7.2.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
7.2.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
7.3 实例三——Neural-Style:使用PyTorch 进行风格迁移. . . . . . . . . . . 196
7.3.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
7.3.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
7.3.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
7.3.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
7.4 实例四——Seq2seq:通过RNN 实现简单的Neural Machine Translation . 205
7.4.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.4.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

本书勘误

印次
  • 页码:37  •  行数:model.eval()之后  •  印次: 1

    在model.eval()之后需要加上model.cpu(),否则会报错

    qazwsx74269 提交于 2017/12/9 21:50:30
    孙学瑛 确认于 2018/1/23 11:45:50
  • 页码:47  •  行数:训练模型第9行  •  印次: 1

    后面加上out=out.squeeze()否则acc一直大于1

    qazwsx74269 提交于 2017/12/9 21:57:07
    孙学瑛 确认于 2018/1/23 11:46:01

读者评论

  • 下载资源在哪个地方,找不到?

    gxyzdzj发表于 2018/5/9 22:18:39
  • 您好,您多久能能将github上的代码修改成0.40版本的呢

    好衰发表于 2018/5/2 9:12:48
  • 你好,我再您的github代码中,character3—NN的param-intialize的ipynb文件中,In[28]的初始化第一层的权值,您的赋值的数组的维度是否反了呢?我测试了一下即使维度不同也不会报错,但是和本身的维度是相反的

    Veritas发表于 2018/2/17 20:39:01
    • self.l1 = nn.Sequential(
      nn.Linear(30, 40),
      nn.ReLU()
      )

      self.l1[0].weight.data = torch.randn(30, 40) # 直接对某一层初始化

      这里,L1的权值矩阵维度本身应该是(40,30)的

      Veritas发表于 2018/2/17 20:40:24
    • @Veritas 感谢您宝贵的意见,确实维度弄反了,因为是直接替代,所以维度不同也不会报错

      廖星宇发表于 2018/2/27 15:48:28
  • 廖先生,您好!看了您的书,内容挺好,简单易懂,但是从github上下载的代码,我运行了,总是有问题,而且我尝试了各种版本的pytorch, 从torch-0.1.7 一直到torch-0.2.0,每个版本错误还不一样,最新的2.0版本其中一个错误如下图
    我装的python版本是3.6,用Anaconda3装的,cuda是0.8的,cudnn是0.6的,还请您能给我个指导,到底是哪里出了问题,万分感谢!

    深度学习小王子发表于 2018/2/1 10:48:37
    • 使用 pytorch 0.3 版本就不会出问题了,建议更新 pytorch 版本,同时保持 github 上的代码更新,github 上的代码在不断更新中,建议持续关注

      廖星宇发表于 2018/2/1 11:47:28
    • @廖星宇 ,可能我选择的是老版本的,但是0.3的我在官网上没有看见。我再找找,如果您有,不知可否提供一个网盘下载地址,谢谢

      深度学习小王子发表于 2018/2/2 21:04:42
    • @廖星宇 您好,刚找到0.3版本的了,经测试,正常,多谢

      深度学习小王子发表于 2018/2/2 22:18:05
    • pytorch 不用安装 cudnn,您可以重新安装,只需要安装 cuda 0.8,然后安装 pytorch 即可,不需要安装 cudnn,希望能够解决你的问题

      廖星宇发表于 2018/2/5 12:29:02
    • @廖星宇 请问您第二版什么时候出版啊?准备再看一次新版纸质的

      深度学习小王子发表于 2018/4/16 21:40:57
    • @廖星宇 我已经装了cudnn,目前允许部分程序有点问题,报cudnn error
      CuDNNError: 4: b'CUDNN_STATUS_INTERNAL_ERROR'
      在以下代码中出错:
      # 开始训练
      from utils import train
      train(net, train_data, test_data, 10, optimzier, criterion)
      train的时候报错,我是不是要卸载cudnn?还是需要做其它处理?

      深度学习小王子发表于 2018/4/16 22:38:53
  • 目前第二版正在更新,所有更新的代码都在书中的 github 地址
    https://github.com/SherlockLiao/code-of-learn-deep-learning-with-pytorch

    廖星宇发表于 2018/1/26 10:05:15

相关博文

  • 深度学习界明星:生成对抗网络与Improving GAN

    深度学习界明星:生成对抗网络与Improving GAN

    管理员账号 2017-11-13

    小编说:2014年,深度学习三巨头之一IanGoodfellow提出了生成对抗网络(Generative Adversarial Networks , GANs)这一概念,刚开始并没有引起轰动,直到2016年,学界、业界对它的兴趣如“...

    管理员账号 2017-11-13
    389 0 0 0
  • 什么是PyTorch,为何要使用PyTorch

    什么是PyTorch,为何要使用PyTorch

    管理员账号 2017-11-21

    什么是PyTorch PyTorch 是Torch7 团队开发的,从它的名字就可以看出,其与Torch 的不同之处在于PyTorch 使用了Python 作为开发语言。所谓“Python first”,同样说明它是一个以Python...

    管理员账号 2017-11-21
    765 0 0 0