《深度学习入门基于Python的理论与实现》中文PDF,配套个人使用源代码,带书签目录,文字可以复制;,仅限学习自用,请勿它用。
夸克网盘链接 :https://pan.quark.cn/s/48bf067f1375
迅雷网盘链接:https://pan.xunlei.com/s/VP2SUfO36sXTqAtOJiixiNYuA1?pwd=x25z
- 每一章都基于代码讲解,接着上一章的代码一步步从简单到复杂,阅读体验很流畅。而且看DeZero的代码实现能学到很多技巧(对于我这种没怎么写过Python的人来说),例如Layer这一节通过重写__setattr__的魔术方法实现了每个深度学习层的Parameter自动统计。
- 概念的逐步引入。DeZero不是一股脑给一堆概念,对着概念一顿实现就完事了,而是一步步的基于功能的需要引入这些概念。比如实现自动微分的时候为什么需要引入Variable和Function;为什么要进行运算符重载、Layer/Module/Optimizer/DataLoader的封装,通过这些方式能把代码优化到什么程度。这种写作方式类似OSTEP,围绕着虚拟化、并发和持久性,一层一层的展示每个功能为什么要做,做完的好处是什么。一个好教材甚至于说一个好项目都应该是这样的,不应该有太多无用的概念,每一层的抽象都得有明确的目的。
- 组合的力量。看高阶微分这一章的时候让我想起了SICP,SICP的很多细节我早就忘得一干二净了,唯一剩下的就是对组合力量的深刻印象。
目录· · · · · ·
第1阶段 自动微分
步骤1 作为“箱子”的变量
步骤2 创建变量的函数
步骤3 函数的连续调用
步骤4 数值微分
步骤5 反向传播的理论知识
步骤6 手动进行反向传播
步骤7 反向传播的自动化
步骤8 从递归到循环
步骤9 让函数更易用
步骤10 测试
第2阶段 用自然的代码表达 59
步骤11 可变长参数
步骤12 可变长参数(改进篇)
步骤13 可变长参数(反向传播篇)
步骤14 重复使用同一个变量
步骤15 复杂的计算图(理论篇)
步骤16 复杂的计算图(实现篇)
步骤17 内存管理和循环引用
步骤18 减少内存使用量的模式
步骤19 让变量更易用
步骤20 运算符重载(1)
步骤21 运算符重载(2)
步骤22 运算符重载(3)
步骤23 打包
步骤24 复杂函数的求导
第3阶段 实现高阶导数
步骤25 计算图的可视化(1)
步骤26 计算图的可视化(2)
步骤27 泰勒展开的导数
步骤28 函数优化
步骤29 使用牛顿法进行优化(手动计算)
步骤30 高阶导数(准备篇)
步骤31 高阶导数(理论篇)
步骤32 高阶导数(实现篇)
步骤33 使用牛顿法进行优化(自动计算)
步骤34 sin函数的高阶导数
步骤35 高阶导数的计算图
步骤36 DeZero的其他用途
第4阶段 创建神经网络
步骤37 处理张量
步骤38 改变形状的函数
38.1 reshape函数的实现
步骤39 求和的函数
步骤40 进行广播的函数
步骤41 矩阵的乘积
步骤42 线性回归
步骤43 神经网络
步骤44 汇总参数的层
步骤45 汇总层的层
步骤46 通过Optimizer更新参数
步骤47 softmax函数和交叉熵误差
步骤48 多分类
步骤49 Dataset类和预处理
步骤50 用于取出小批量数据的DataLoader
步骤51 MINST的训练
第5阶段 DeZero高级挑战
步骤52 支持GPU
步骤53 模型的保存和加载
步骤54 Dropout和测试模式
步骤55 CNN的机制(1)
步骤56 CNN的机制(2)
步骤57 conv2d函数和pooling函数
步骤58 具有代表性的CNN(VGG16)
步骤59 使用RNN处理时间序列数据
步骤60 LSTM与数据加载器