9.1_作为Python函数使用
9.1 作为Python函数使用
此前,DeZero中使用的函数是作为Python的类实现的。举例来说,在使用Square类进行计算的情况下,我们需要编写如下代码。
$\mathbf{x} =$ Variable(np.array(0.5))
f = Square()
y = f(x)上面的代码是分两步计算平方的:创建一个Square类的实例;调用这个实例。但是从用户的角度来看,分两步完成有点啰唆(虽然可以写成y = Square()(x),但观感很差)。用户更希望把DeZero的函数当作Python函数使用。为此,需要添加以下代码。
def square(x):
f = Square()
return f(x)
def exp(x):
f = Exp()
return f(x)上面的代码实现了square和exp两个函数。这样我们就可以将DeZero的函数当作Python函数使用了。顺便提一下,上面的代码也可以像下面这样写成一行。
steps/step09.py
def square(x):
return Square() (x) # 编写在一行内
def exp(x):
return Exp() (x)上面的代码没有像 这样通过变量名 来引用,而是直接写成了 ,这样也是可以的。接下来我们使用一下前面实现的两个函数。
$\mathbf{x} =$ Variable(np.array(0.5))
a $=$ square(x)
b $=$ exp(a)
y $=$ square(b)
y.grad $=$ np.array(1.0)
y.backup()
print(x.grad)运行结果
3.297442541400256
如上所示,用Variable封装np.array(0.5)后,就可以像使用NumPy进行计算一样来编码了。另外,函数现在也支持连续调用,示例代码如下所示。
$\mathbf{x} =$ Variable(np.array(0.5))
y $=$ square(exp(square(x))) # 连续调用
y.grad $=$ np.array(1.0)
y_backward()
print(x.grad)运行结果
3.297442541400256
这样我们就可以编写更自然的代码进行计算。以上是第1项改进。