OpenTech
Books
Toggle theme
Toggle theme
Table of Contents
00_前言
README
01_步骤1_作为“箱子”的变量
1.1_什么是变量
1.2_实现Variable类
1.3_(补充) NumPy 的多维数组
02_步骤2_创建变量的函数
2.1_什么是函数
2.2_Function类的实现
2.3_使用Function类
03_步骤3_函数的连续调用
3.1_Exp函数的实现
3.2_函数的连续调用
04_步骤4_数值微分
4.1_什么是导数
4.2_数值微分的实现
4.3_复合函数的导数
4.4_数值微分存在的问题
05_步骤5_反向传播的理论知识
5.1_链式法则
5.2_反向传播的推导
5.3_用计算图表示
06_步骤6_手动进行反向传播
6.1_Variable类的功能扩展
6.2_Function 类的功能扩展
6.3_Square类和Exp类的功能扩展
6.4_反向传播的实现
07_步骤7_反向传播的自动化
7.1_为反向传播的自动化创造条件
7.2_尝试反向传播
7.3_增加backward方法
08_步骤8_从递归到循环
8.1_现在的Variable类
8.2_使用循环实现
8.3_代码验证
09_步骤9_让函数更易用
9.1_作为Python函数使用
9.2_简化backward方法
9.3_只支持ndarray
10_步骤10_测试
README
10.1_Python的单元测试
10.2_square函数反向传播的测试
10.3_通过梯度检验来自动测试
10.4_测试小结
11_步骤11_可变长参数(正向传播篇)
11.1_修改Function类
11.2_Add类的实现
12_步骤12_可变长参数(改进篇)
12.1_第1项改进:使函数更容易使用
12.2_第2项改进:使函数更容易实现
12.3_add函数的实现
13_步骤13_可变长参数(反向传播篇)
13.1_支持可变长参数的Add类的反向传播
13.2_修改Variable类
13.3_Square类的实现
14_步骤14_重复使用同一个变量
14.1_问题的原因
14.2_解决方案
14.3_重置导数
15_步骤15_复杂的计算图(理论篇)
15.1_反向传播的正确顺序
15.2_当前的DeZero
15.3_函数的优先级
16_步骤16_复杂的计算图(实现篇)
16.1_增加“辈分”变量
16.2_按照“辈分”顺序取出元素
16.3_Variable 类的 backward
16.4_代码验证
17_步骤17_内存管理和循环引用
17.1_内存管理
17.2_引用计数方式的内存管理
17.3_循环引用
17.5_代码验证
18_步骤18_减少内存使用量的模式
18.1_不保留不必要的导数
18.2_回顾Function类
18.3_使用Config类进行切换
18.4_模式的切换
18.5_使用 with 语句切换
19_步骤19_让变量更易用
19.1_命名变量
19.2_实例变量ndarray
19.3_len函数和print函数
20_步骤20_运算符重载(1)
20.1_Mul类的实现
20.2_运算符重载
21_步骤21_运算符重载(2)
21.1_与ndarray一起使用
21.2_与float和int一起使用
21.3_问题1:左项为float或int的情况
21.4_问题2:左项为ndarray实例的情况
22_步骤22_运算符重载(3)
22.1_负数
22.2_减法
22.3_除法
22.4_幂运算
23_步骤23_打包
README
23.1_文件结构
23.2_将代码移到核心类
23.3_运算符重载
23.4_实际的__init__.py文件
23.5_导入dezero
24_步骤24_复杂函数的求导
24.1_Sphere函数
24.2_matyas函数
24.3_Goldstein-Price函数
25_步骤25_计算图的可视化(1)
25.1_安装Graphviz
25.2_使用DOT语言描述图形
25.3_指定节点属性
25.4_连接节点
26_步骤26_计算图的可视化(2)
26.1_可视化代码的使用示例
26.2_从计算图转换为DOT语言
26.3_从DOT语言转换为图像
26.4_代码验证
27_步骤27_泰勒展开的导数
27.1_sin函数的实现
27.2_泰勒展开的理论知识
27.3_泰勒展开的实现
27.4_计算图的可视化
28_步骤28_函数优化
README
28.1_Rosenbrock 函数
28.2_求导
28.3_梯度下降法的实现
29_步骤29_使用牛顿法进行优化(手动计算)
29.1_使用牛顿法进行优化的理论知识
29.2_使用牛顿法实现优化
30_步骤30_高阶导数(准备篇)
30.1_确认工作①:Variable实例变量
30.2_确认工作②:Function类
30.3_确认工作③:Variable类的反向传播
31_步骤31_高阶导数(理论篇)
31.1_在反向传播时进行的计算
31.2_创建反向传播的计算图的方法
32_步骤32_高阶导数(实现篇)
32.1_新的DeZero
32.2_函数类的反向传播
32.4_修改__init__.py
33_步骤33_使用牛顿法进行优化(自动计算)
33.1_求二阶导数
33.2_使用牛顿法进行优化
34_步骤34_sin函数的高阶导数
34.1_sin函数的实现
34.2_cos函数的实现
34.3_sin函数的高阶导数
35_步骤35_高阶导数的计算图
35.1_tanh函数的导数
35.2_tanh函数的实现
35.3_高阶导数的计算图可视化
36_步骤36_DeZero的其他用途
36.1_double backprop的用途
36.2_深度学习研究中的应用示例
37_步骤37_处理张量
37.1_对各元素进行计算
37.2_使用张量时的反向传播
38_步骤38_改变形状的函数
38.1_reshape函数的实现
38.2_从Variable对象调用reshape
38.3_矩阵的转置
39_步骤39_求和的函数
README
39.1_sum函数的反向传播
39.2_sum函数的实现
39.3_axis和keepdims
40_步骤40_进行广播的函数
40.1_broadcast_to 函数和 sum_to 函数
40.2_DeZero的broadcast_to函数和sum_to函数
40.3_支持广播
41_步骤41_矩阵的乘积
41.1_向量的内积和矩阵的乘积
41.2_检查矩阵的形状
41.3_矩阵乘积的反向传播
42_步骤42_线性回归
README
42.1_玩具数据集
42.2_线性回归的理论知识
42.3_线性回归的实现
42.4_DeZero 的 mean_squared_error 函数 (补充内容)
43_步骤43_神经网络
README
43.1_DeZero中的linear函数
43.2_非线性数据集
43.3_激活函数和神经网络
43.4_神经网络的实现
44_步骤44_汇总参数的层
44.1_Parameter类的实现
44.2_Layer类的实现
44.3_Linear类的实现
44.4_使用Layer实现神经网络
45_步骤45_汇总层的层
README
45.1_扩展Layer类
45.2_Model 类
45.3_使用Model来解决问题
45.4_MLP类
46_步骤46_通过Optimizer更新参数
46.1_Optimizer 类
46.2_SGD类的实现
46.3_使用SGD类来解决问题
46.4_SGD以外的优化方法
47_步骤47_softmax函数和交叉熵误差
47.1_用于切片操作的函数
47.2_softmax函数
47.3_交叉熵误差
48_步骤48_多分类
README
48.1_螺旋数据集
48.2_用于训练的代码
49_步骤49_Dataset类和预处理
49.1_Dataset类的实现
49.2_大型数据集的情况
49.3_数据的连接
49.4_用于训练的代码
49.5_数据集的预处理
50_步骤50_用于取出小批量数据的 DataLoader
50.1_什么是迭代器
50.2_使用 DataLoader
50.3_accuracy函数的实现
50.4_螺旋数据集的训练代码
51_步骤51_MINST的训练
51.1_MNIST数据集
51.2_训练MNIST
51.3_改进模型
52_步骤52_支持GPU
52.1_CuPy的安装和使用方法
52.3_向Variable-Layer-DataLoader类添加代码
52.4_函数的相应修改
52.5_在GPU上训练MNIST
53_步骤53_模型的保存和加载
53.1_NumPy的save函数和load函数
53.2_Layer类参数的扁平化
53.3_Layer 类的 save 函数和 load 函数
54_步骤54_Dropout和测试模式
54.1_什么是Dropout
54.2_Inverted Dropout
54.3_增加测试模式
54.4_Dropout的实现
55_步骤55_CNN的机制(1)
55.1_CNN的网络结构
55.2_卷积运算
55.3_填充
55.4_步幅
55.5_输出大小的计算方法
56_步骤56_CNN的机制(2)
56.1_三阶张量
56.2_结合方块进行思考
56.3_小批量处理
56.4_池化层
57_步骤57_conv2d函数和pooling函数
57.1_使用im2col展开
57.2_conv2d函数的实现
57.3_Conv2d层的实现
57.4_pooling函数的实现
58_步骤58_具有代表性的CNN(VGG16)
58.1_VGG16的实现
58.2_已训练的权重数据
58.3_使用已训练的VGG16
59_步骤59_使用RNN处理时间序列数据
59.1_RNN层的实现
59.2_RNN模型的实现
59.3_切断连接的方法
59.4_正弦波的预测
60_步骤60_LSTM与数据加载器
60.1_用于时间序列数据的数据加载器
60.2_LSTM层的实现
99_后记
README
100_参考文献
README
附录A_in-place运算(步骤14的补充内容)
A.1_问题确认
A.2_关于复制和覆盖
A.3_DeZero的反向传播