7.2_尝试反向传播

7.2 尝试反向传播

下面利用变量和函数之间的连接,尝试实现反向传播。首先实现从y到b的反向传播。代码如下所示(为了便于理解,这里附上了计算图)。

y.grad = np.array(1.0)  
C = y creator # 1. 获取函数  
b = C-input # 2. 获取函数的输入  
b.grad = C.Backward(y.grad) # 3. 调用函数的backward方法

上面的代码从y的实例变量creator获取函数,从函数的input获取输入变量,然后调用函数的backward方法。下面是从变量b到变量a反向传播的计算图和代码。

B = b creator # 1. 获取函数
a = B-input # 2. 获取函数的输入
a.grad = B.Backward(b.grad) # 3. 调用函数的backward方法

上述代码执行的反向传播的逻辑与之前的相同。具体来说,该流程如下所示。

  1. 获取函数

  2. 获取函数的输入

  3. 调用函数的 backward 方法

最后是从变量a到变量x的反向传播。

A = a creator # 1. 获取函数  
x = A_input # 2. 获取函数的输入  
x.grad = A_backward(a.grad) # 3. 调用函数的 backward 方法  
print(x.grad)

运行结果

3.297442541400256

这样就完成了所有的反向传播。