1.2_实现Variable类

1.2 实现Variable类

变量的英语是 variable。这里我们把 DeZero 的变量以 Variable 类的形式实现。补充一句,类名首字母大写是 Python 的一条常见的编码规则。这条规则记载在 Python 的 PEP8 编码规范中。

下面编写代码,让Variable类具备“箱子”的功能。实现这个功能的最简代码如下所示。

steps/step01.py

class Variable: def__init__(self,data): self.data  $\equiv$  data

上面的代码所做的是在初始化时,将传来的参数设置为实例变量 data。虽然这段代码很简单,但它可以让 Variable 类作为“箱子”使用,因为实际的数据被保存在 Variable 的 data 里。结合下面的使用示例,我们能更清晰地看出这一点。

steps/step01.py
import numpy as np  
data = np.array(1,0)  
x = Variable(data)  
print(x.data)

运行结果

1.0

这个例子使用了NumPy的多维数组来保存放入“箱子”里的数据。例子中的x是一个Variable实例,实际的数据在x里面。换言之,x不是数据,而是存放数据的实体,也就是一个存放数据的“箱子”。

本书在展示代码时,会在代码的右上角标明它出自哪个文件。在上面的示例代码中,代码的右上角写着steps/step01.py,这表示你可以在本书的随书下载文件①中的step/step01.py中找到这段代码。有些示例代码的右上角没有记载文件名,这种情况意味着随书下载文件里没有对应的代码文件。

机器学习系统使用多维数组作为底层数据结构。因此,DeZero的Variable类要设计成只能处理NumPy多维数组的形式。NumPy多维数组的类是numpy.ndarray(np.ndarray)。如前面的代码所示,我们可以使用np.array函数来创建它的实例。另外,本书后面在提到numpy.ndarray实例时,都将其简称为ndarray实例。

接下来为前面代码中的 xx 赋新的数据。代码编写如下。

steps/step01.py
x.data = np.array(2,0)  
print(x.data)

运行结果

2.0

如这段代码所示,只要按照 xx .data = ... 的方式编写, xx 就会被赋上新的数据。这样Variable类就可以作为一个“箱子”使用了。

以上就是步骤1实现的所有代码。虽然现在Variable类只有3行代码,但我们会在此基础上将DeZero打造成一个现代框架。