我已经开始使用神经网络,并尝试使用ReLU激活功能实现正向和反向传递。但是,对于倒退,我觉得我误会了一些相对基本的东西。
import numpy as np
class ReLU:
def __init__(self):
self.input_tensor = None
def forward(self, input_tensor):
self.input_tensor = input_tensor
return np.maximum(0, input_tensor)
def backward(self, error_tensor):
deriv = np.greater(error_tensor, 0).astype(int)
return self.input_tensor - deriv
我的问题很简单:后向方法的输出应该怎么看?我的困惑源于ReLU的派生词很简单的事实,但是我不确定然后如何将其计入传递到下一堂课的输出中。我绝对意识到,我不能简单地从旧输入中减去导数,但是我看不到它们是如何结合在一起的。
答案 0 :(得分:0)
对于x> 0,relu就像将x乘以1。否则,就像将x乘以0。然后导数是1(x> 0)或0(x <= 0)。
因此,根据输出的不同,必须将error_tensor
乘以1或0。
如果不清楚,则意味着您必须保存前向通过的输出以帮助计算梯度。