使用 Numpy 创建自己的深度学习框架
本文并不是为了造轮子,只是通过手动实现来介绍建基本深度学习框架所需组件和步骤
Numpy 已经提供了基本上所有需要的计算操作,我们需要的是一个支持自动微分(autograd)的框架来计算多个操作的梯度,这是模块化方法构建神经网络层的标准化方法,通过自动微分的框架,我们可以将优化器、激活函数等组合在一起用于训练神经网络。
所以一个基本的深度学习框架的组件总结如下:
- 一个autograd系统
- 神经网络层
- 神经网络模型
- 优化器
- 激活函数
- 数据集
接下来,我们将逐一介绍这些组件,看看它们的作用以及如何使用他们,这里将使用 gradflow(这是一个个人开源教育 autograd 系统)因为它支持深度神经网络,并且和 PyTorch API基本一致。
Autograd系统
这是最重要的组成部分,它是每个深度学习框架的基础,因为系统将跟踪应用于输入张量的操作,并使用损失函数针对于每个参数的梯度来更新模型的权重。这里的一个必要条件是这些操作必须是可微的。
我们的 autograd 系统的基础是变量,通过为我们需要的操作实现 dunder 方法(dunder 方法 :Python中以双下划线开头的特殊方法),我们将能够跟踪每个实例的父实例是什么以及如何为它们计算梯度。为了帮助进行一些操作,我们将使用一个 numpy 数组来保存实际数据。
变量的另一个重要部分是反向传播方法,这将计算当前实例相对于计算图中每个父类祖先的梯度。在具体步骤中,我们将使用父级的引用和原始操作中嵌入的梯度函数来更新 grad 成员字段。
以下代码片段包含主变量类初始化函数、添加操作的 dunder 方法和反向传播方法:
完整文章:
https://avoid.overfit.cn/post/06fddd582b27492cae9a00e9f600dce4