科技
类型
9.6
豆瓣评分
可以朗读
语音朗读
211千字
字数
2023-03-01
发行日期
展开全部
主编推荐语
系统解析深度学习框架中蕴藏着惊人的技术和有趣的机制。
内容简介
本书会带领读者从零开始创建一个深度学习框架——DeZero。DeZero是本书原创的框架,它用最少的代码实现了现代深度学习框架的功能。本书分60个步骤来完成这个框架,在此过程中,读者会加深对PyTorch、TensorFlow和Chainer等现代深度学习框架的理解,看清深度学习框架的本质。
目录
- 版权信息
- O'Reilly Media, Inc. 介绍
- 前言
- 第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上运行
- 后记
- 参考文献
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。
