万本电子书0元读

万本电子书0元读

顶部广告

深度学习入门2:自制框架电子书

·“鱼书”《深度学习门:基于Python的理论与实现》作者又一力作。手把手带你创建深度学习框架,直现代深度学习框架本质! ·内容简明易懂,讲解详细 本书延续前作的行文风格,采用通俗的语言和大量直观的示意图详细讲解,帮助读者加深对PyTorch、TensorFlow和Chainer等现代深度学习框架的理解,一步巩固Python编程和软件发的相关知识。 ·通过“从零创建”,剖析深度学习框架机制

售       价:¥

纸质售价:¥64.90购买纸书

3人正在读 | 0人评论 6.7

作       者:[日]斋藤康毅 著

出  版  社:人民邮电出版社有限公司

出版时间:2023-03-01

字       数:21.5万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(条)
  • 读书简介
  • 目录
  • 累计评论(条)
深度学习框架中蕴藏着惊人的技术和有趣的机制,本书旨在揭这些技术和机制的神秘面纱,帮助读者正确理解技术,体会它们的有趣之处。为此,本书会带领读者从零始创建一个深度学习框架——DeZero。DeZero 是本书原创的框架,它用少的代码实现了现代深度学习框架的功能。本书分60 个步骤来完成这个框架,在此过程中,读者会加深对PyTorch、TensorFlow 和Chainer 等现代深度学习框架的理解,看清深度学习框架的本质。 本书沿袭《深度学习门:基于Python 的理论与实现》的风格,语言通俗,代码简洁,讲解详细。在自制框架的过程中,读者还能一步巩固Python 编程和软件发相关的知识。 本书适合对深度学习框架感兴趣的读者阅读。<br/>【推荐语】<br/>·“鱼书”《深度学习门:基于Python的理论与实现》作者又一力作。手把手带你创建深度学习框架,直现代深度学习框架本质! ·内容简明易懂,讲解详细 本书延续前作的行文风格,采用通俗的语言和大量直观的示意图详细讲解,帮助读者加深对PyTorch、TensorFlow和Chainer等现代深度学习框架的理解,一步巩固Python编程和软件发的相关知识。 ·通过“从零创建”,剖析深度学习框架机制 本书会从零创建一个深度学习框架,让读者在运行程序的过程中了解深度学习框架中蕴藏的技术与机制。通过这样的体验,读者可了解到深度学习框架的本质。 ·增量发 本书将繁杂的深度学习框架的创建工作分为60个步骤完成,内容循序渐,读者可在一步步的实践过程中获得正向的反馈结果,激发学习动力。<br/>【作者】<br/>斋藤康毅(作者) 1984年生于日本长崎县,东京工业大学毕业,并完成东京大学研究生院课程。目前在某企业从事人工智能相关的研究和发工作。著有《深度学习门:基于Python的理论与实现》,同时也是Introducing Python、Python in Practice、The Elements of Computing Systems、Building Machine Learning Systems with Python的日文版译者。 郑明智(译者) 智慧医疗工程师。主要研究方向为医疗与前沿ICT技术的结合及其应用,密切关注人工智能、量子计算等领域。译有《深度学习基础与实践》《详解深度学习》《白话机器学习的数学》等书。<br/>
目录展开

版权声明

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 上运行

后记

谢辞

参考文献

看完了

累计评论(条) 个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部