0

我已经开始使用神经网络,并尝试使用 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

我的问题很简单:backward 方法的输出甚至应该看起来如何?我的困惑源于 ReLU 的导数足够简单这一事实,但我不确定如何将其考虑到传递到下一节课的输出中。我绝对知道我不能简单地从旧输入中减去导数,但我无法看到它们是如何结合在一起的。

4

1 回答 1

0

对于 x > 0,relu 就像 x 乘以 1。否则,它就像 x 乘以 0。然后导数是 1 (x>0) 或 0 (x<=0)。

所以根据输出是什么,你必须乘以error_tensor1 或 0。

如果不清楚,这意味着您必须保存前向传递的输出以帮助计算梯度。

于 2019-10-28T14:33:15.157 回答