34.1_sin函数的实现
34.1 sin函数的实现
首先要实现的是支持高阶导数的新的Sin类。我们先来看一下式子, 的导数为 。因此,Sin类和sin函数可以通过如下代码实现。
dezero/functions.py
import numpy as np
fromdezero.core import Function
class Sin(Functions): defforward(self,x): $\mathbf{y} = \mathbf{np}\cdot \sin (\mathbf{x})$return y
def backward(self, gy): x, $=$ selfinputs $\mathrm{gx} = \mathrm{gy}*\cos (\mathrm{x})$ return gx
def sin(x): return Sin()x这里重点看一下backward方法的实现。特别要注意的是,backward方法中的所有变量都是Variable实例(forward方法中的变量是ndarray实例)。因此,代码中的 是DeZero的 函数。这意味着要想实现Sin类,需要用到Cos类和 函数。
另外,backward方法的实现需要所有计算都使用DeZero函数。如果函数不是DeZero函数,就得重新实现它。上面代码中的乘法运算 通过运算符重载调用了DeZero的mul函数。

dezero/functions.py中的Sin类的代码与上面的代码有一些不同。实际的代码中增加了支持GPU的代码。另外,本书后面出现的函数的代码中也省略了支持GPU的代码。步骤52中会实现对GPU的支持。