30.1_确认工作①:Variable实例变量

30.1 确认工作①:Variable实例变量

我们先来回顾一下Variable类的实例变量。首先看一下初始化Variable类的__init__方法。

class Variable: def__init__(self,data,name  $\equiv$  None): if data is not None: ifnotisinstance(data,np.ndarray): raiseTypeError('{}isnotsupported'.format(type(data))) self.data  $=$  data self.name  $=$  name self.grad  $=$  None self creator  $=$  None self_generation  $= 0$

如代码所示,Variable类有几个实例变量。这里重点关注一下其中的 data 和 grad。data 和 grad 分别用于正向传播和反向传播的计算。需要注意的是,data 和 grad 都是 ndarray 实例的引用。为了强调这一点,笔者引入图 30-1 这种图形表示方法。


图30-1 Variable的新表示方法

如图30-1所示,我们将data和grad画成立方体的容器。图30-2是data和grad引用了ndarray实例的图示。


图30-2 Variable的新表示方法(数据引用)

图30-2中的左图是执行 x=Variable(np.array(2.0))x = \text{Variable}(np.array(2.0)) 时的例子,右图是执行 x.backward()x.\text{backward}()x.grad=np.array(1.0)x.\text{grad} = \text{np.array}(1.0) 时的例子。笔者将使用这种图形表示方法进行说明。