展开全部

主编推荐语

系统解析深度学习框架中蕴藏着惊人的技术和有趣的机制。

内容简介

本书会带领读者从零开始创建一个深度学习框架——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日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。