这是我的项目的链接:https ://github.com/aaronnoyes/neural-network/blob/master/nn.py
我已经在 python 中实现了一个基本的神经网络。默认情况下,它使用 sigmoid 激活函数,效果很好。我试图比较激活函数之间学习率的变化,所以我尝试实现一个使用 ReLU 的选项。但是,当它运行时,权重会立即下降到 0。
if (self.activation == 'relu'):
d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * self.relu(self.output, True)))
d_weights1 = np.dot(self.input.T, (np.dot(2*(self.y - self.output) * self.relu(self.output, True), self.weights2.T) * self.relu(self.layer1, True)))
当我尝试应用梯度下降时,我几乎可以肯定问题出在程序的第 54-56 行(如上所示)。我该如何解决这个问题,以便程序实际上会适当地更新权重?我的relu实现如下:
def relu(self, x, derivative=False):
if derivative:
return 1. * (x > 0)
else:
return x * (x > 0)