·“鱼书”《深度学习门:基于Python的理论与实现》作者又一力作。手把手带你创建深度学习框架,直现代深度学习框架本质! ·内容简明易懂,讲解详细 本书延续前作的行文风格,采用通俗的语言和大量直观的示意图详细讲解,帮助读者加深对PyTorch、TensorFlow和Chainer等现代深度学习框架的理解,一步巩固Python编程和软件发的相关知识。 ·通过“从零创建”,剖析深度学习框架机制
售 价:¥
纸质售价:¥64.90购买纸书
6.7
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

版权声明
O'Reilly Media, Inc. 介绍
业界评论
前言
只有创建,才能看见
本书的原创框架
增量开发
本书的路线图
踏上创建 DeZero 之旅
必要的软件
文件构成
第 1 阶段 自动微分
步骤 1 作为“箱子”的变量
1.1 什么是变量
1.2 实现 Variable 类
1.3 (补充)NumPy 的多维数组
步骤 2 创建变量的函数
2.1 什么是函数
2.2 Function 类的实现
2.3 使用 Function 类
步骤 3 函数的连续调用
3.1 Exp 函数的实现
3.2 函数的连续调用
步骤 4 数值微分
4.1 什么是导数
4.2 数值微分的实现
4.3 复合函数的导数
4.4 数值微分存在的问题
步骤 5 反向传播的理论知识
5.1 链式法则
5.2 反向传播的推导
5.3 用计算图表示
步骤 6 手动进行反向传播
6.1 Variable 类的功能扩展
6.2 Function 类的功能扩展
6.3 Square 类和 Exp 类的功能扩展
6.4 反向传播的实现
步骤 7 反向传播的自动化
7.1 为反向传播的自动化创造条件
7.2 尝试反向传播
7.3 增加 backward 方法
步骤 8 从递归到循环
8.1 现在的 Variable 类
8.2 使用循环实现
8.3 代码验证
步骤 9 让函数更易用
9.1 作为 Python 函数使用
9.2 简化 backward 方法
9.3 只支持 ndarray
步骤 10 测试
10.1 Python 的单元测试
10.2 square 函数反向传播的测试
10.3 通过梯度检验来自动测试
10.4 测试小结
第 2 阶段 用自然的代码表达
步骤 11 可变长参数(正向传播篇)
11.1 修改 Function 类
11.2 Add 类的实现
步骤 12 可变长参数(改进篇)
12.1 第 1 项改进:使函数更容易使用
12.2 第 2 项改进:使函数更容易实现
12.3 add 函数的实现
步骤 13 可变长参数(反向传播篇)
13.1 支持可变长参数的 Add 类的反向传播
13.2 修改 Variable 类
13.3 Square 类的实现
步骤 14 重复使用同一个变量
14.1 问题的原因
14.2 解决方案
14.3 重置导数
步骤 15 复杂的计算图(理论篇)
15.1 反向传播的正确顺序
15.2 当前的 DeZero
15.3 函数的优先级
步骤 16 复杂的计算图(实现篇)
16.1 增加“辈分”变量
16.2 按照“辈分”顺序取出元素
16.3 Variable 类的 backward
16.4 代码验证
步骤 17 内存管理和循环引用
17.1 内存管理
17.2 引用计数方式的内存管理
17.3 循环引用
17.4 weakref 模块
17.5 代码验证
步骤 18 减少内存使用量的模式
18.1 不保留不必要的导数
18.2 回顾 Function 类
18.3 使用 Config 类进行切换
18.4 模式的切换
18.5 使用 with 语句切换
步骤 19 让变量更易用
19.1 命名变量
19.2 实例变量 ndarray
19.3 len 函数和 print 函数
步骤 20 运算符重载(1)
20.1 Mul 类的实现
20.2 运算符重载
步骤 21 运算符重载(2)
21.1 与 ndarray 一起使用
21.2 与 float 和 int 一起使用
21.3 问题 1:左项为 float 或 int 的情况
21.4 问题 2:左项为 ndarray 实例的情况
步骤 22 运算符重载(3)
22.1 负数
22.2 减法
22.3 除法
22.4 幂运算
步骤 23 打包
23.1 文件结构
23.2 将代码移到核心类
23.3 运算符重载
23.4 实际的 __init__.py 文件
23.5 导入 dezero
步骤 24 复杂函数的求导
24.1 Sphere 函数
24.2 matyas 函数
24.3 Goldstein-Price 函数
第 3 阶段 实现高阶导数
步骤 25 计算图的可视化(1)
25.1 安装 Graphviz
25.2 使用 DOT 语言描述图形
25.3 指定节点属性
25.4 连接节点
步骤 26 计算图的可视化(2)
26.1 可视化代码的使用示例
26.2 从计算图转换为 DOT 语言
26.3 从 DOT 语言转换为图像
26.4 代码验证
步骤 27 泰勒展开的导数
27.1 sin 函数的实现
27.2 泰勒展开的理论知识
27.3 泰勒展开的实现
27.4 计算图的可视化
步骤 28 函数优化
28.1 Rosenbrock 函数
28.2 求导
28.3 梯度下降法的实现
步骤 29 使用牛顿法进行优化(手动计算)
29.1 使用牛顿法进行优化的理论知识
29.2 使用牛顿法实现优化
步骤 30 高阶导数(准备篇)
30.1 确认工作①:Variable 实例变量
30.2 确认工作②:Function 类
30.3 确认工作③:Variable 类的反向传播
步骤 31 高阶导数(理论篇)
31.1 在反向传播时进行的计算
31.2 创建反向传播的计算图的方法
步骤 32 高阶导数(实现篇)
32.1 新的 DeZero
32.2 函数类的反向传播
32.3 实现更有效的反向传播(增加模式控制代码)
32.4 修改 __init__.py
步骤 33 使用牛顿法进行优化(自动计算)
33.1 求二阶导数
33.2 使用牛顿法进行优化
步骤 34 sin 函数的高阶导数
34.1 sin 函数的实现
34.2 cos 函数的实现
34.3 sin 函数的高阶导数
步骤 35 高阶导数的计算图
35.1 tanh 函数的导数
35.2 tanh 函数的实现
35.3 高阶导数的计算图可视化
步骤 36 DeZero 的其他用途
36.1 double backprop 的用途
36.2 深度学习研究中的应用示例
第 4 阶段 创建神经网络
步骤 37 处理张量
37.1 对各元素进行计算
37.2 使用张量时的反向传播
37.3 使用张量时的反向传播(补充内容)
步骤 38 改变形状的函数
38.1 reshape 函数的实现
38.2 从 Variable 对象调用 reshape
38.3 矩阵的转置
38.4 实际的 transpose 函数(补充内容)
步骤 39 求和的函数
39.1 sum 函数的反向传播
39.2 sum 函数的实现
39.3 axis 和 keepdims
步骤 40 进行广播的函数
40.1 broadcast_to 函数和 sum_to 函数
40.2 DeZero 的 broadcast_to 函数和 sum_to 函数
40.3 支持广播
步骤 41 矩阵的乘积
41.1 向量的内积和矩阵的乘积
41.2 检查矩阵的形状
41.3 矩阵乘积的反向传播
步骤 42 线性回归
42.1 玩具数据集
42.2 线性回归的理论知识
42.3 线性回归的实现
42.4 DeZero 的 mean_squared_error 函数(补充内容)
步骤 43 神经网络
43.1 DeZero 中的 linear 函数
43.2 非线性数据集
43.3 激活函数和神经网络
43.4 神经网络的实现
步骤 44 汇总参数的层
44.1 Parameter 类的实现
44.2 Layer 类的实现
44.3 Linear 类的实现
44.4 使用 Layer 实现神经网络
步骤 45 汇总层的层
45.1 扩展 Layer 类
45.2 Model 类
45.3 使用 Model 来解决问题
45.4 MLP 类
步骤 46 通过 Optimizer 更新参数
46.1 Optimizer 类
46.2 SGD 类的实现
46.3 使用 SGD 类来解决问题
46.4 SGD 以外的优化方法
步骤 47 softmax 函数和交叉熵误差
47.1 用于切片操作的函数
47.2 softmax 函数
47.3 交叉熵误差
步骤 48 多分类
48.1 螺旋数据集
48.2 用于训练的代码
步骤 49 Dataset 类和预处理
49.1 Dataset 类的实现
49.2 大型数据集的情况
49.3 数据的连接
49.4 用于训练的代码
49.5 数据集的预处理
步骤 50 用于取出小批量数据的 DataLoader
50.1 什么是迭代器
50.2 使用 DataLoader
50.3 accuracy 函数的实现
50.4 螺旋数据集的训练代码
步骤 51 MINST 的训练
51.1 MNIST 数据集
51.2 训练 MNIST
51.3 改进模型
第 5 阶段 DeZero 高级挑战
步骤 52 支持 GPU
52.1 CuPy 的安装和使用方法
52.2 cuda 模块
52.3 向 Variable/Layer/DataLoader 类添加代码
52.4 函数的相应修改
52.5 在 GPU 上训练 MNIST
步骤 53 模型的保存和加载
53.1 NumPy 的 save 函数和 load 函数
53.2 Layer 类参数的扁平化
53.3 Layer 类的 save 函数和 load 函数
步骤 54 Dropout 和测试模式
54.1 什么是 Dropout
54.2 Inverted Dropout
54.3 增加测试模式
54.4 Dropout 的实现
步骤 55 CNN 的机制(1)
55.1 CNN 的网络结构
55.2 卷积运算
55.3 填充
55.4 步幅
55.5 输出大小的计算方法
步骤 56 CNN 的机制(2)
56.1 三阶张量
56.2 结合方块进行思考
56.3 小批量处理
56.4 池化层
步骤 57 conv2d 函数和 pooling 函数
57.1 使用 im2col 展开
57.2 conv2d 函数的实现
57.3 Conv2d 层的实现
57.4 pooling 函数的实现
步骤 58 具有代表性的 CNN(VGG16)
58.1 VGG16 的实现
58.2 已训练的权重数据
58.3 使用已训练的 VGG16
步骤 59 使用 RNN 处理时间序列数据
59.1 RNN 层的实现
59.2 RNN 模型的实现
59.3 切断连接的方法
59.4 正弦波的预测
步骤 60 LSTM 与数据加载器
60.1 用于时间序列数据的数据加载器
60.2 LSTM 层的实现
附录 A in-place 运算(步骤 14 的补充内容)
A.1 问题确认
A.2 关于复制和覆盖
A.3 DeZero 的反向传播
附录 B 实现 get_item 函数(步骤 47 的补充内容)
附录 C 在 Google Colaboratory 上运行
后记
谢辞
参考文献
看完了
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜