我要在使用 ReLU 的神经网络上进行反向传播。在我之前的一个项目中,我是在一个使用 Sigmoid 激活函数的网络上完成的,但现在我有点困惑,因为 ReLU 没有导数。
这是一张关于 weight5 如何影响总误差的图像。在此示例中,如果我使用 sigmoid 函数,则 out/net = a*(1 - a)。
我应该写什么而不是“a *(1 - a)”来使反向传播工作?
我要在使用 ReLU 的神经网络上进行反向传播。在我之前的一个项目中,我是在一个使用 Sigmoid 激活函数的网络上完成的,但现在我有点困惑,因为 ReLU 没有导数。
这是一张关于 weight5 如何影响总误差的图像。在此示例中,如果我使用 sigmoid 函数,则 out/net = a*(1 - a)。
我应该写什么而不是“a *(1 - a)”来使反向传播工作?
因为 ReLU 没有导数。
不,ReLU 有导数。我假设您正在使用 ReLU 函数f(x)=max(0,x)
。这意味着如果x<=0
那么f(x)=0
,否则f(x)=x
。在第一种情况下,当x<0
f(x) 对 x 的导数是这样时,结果为f'(x)=0
。在第二种情况下,很明显计算f'(x)=1
.
relu 导数可以用 np.heaviside 阶跃函数来实现,例如 np.heaviside(x, 1)。第二个参数定义了 x = 0 时的返回值,所以当 x = 0 时,1 表示 1。