我试图在python上构建一个NN来解决输入X(a,b)和输出Y(c)的回归问题。使用leaky Relu 作为隐藏层的激活函数和输出层的线性函数。经过 3-4 次迭代后,nn 似乎会因极大/极小的数字而爆裂,并导致NaN
. 我使用的衍生物如下。也许有人可以帮助我 - 是我的数学问题还是我应该在 nn 之前做更多的工作来规范化 X 和 Y ?
dW2 = -2*(np.dot(dZ2,A1.transpose()))/m
db2 = -2*(np.sum(dZ2, axis = 1, keepdims = True))/m
drel = lrelu(Z1)
dZ1 = (np.dot(W2.transpose(),dZ2))*(drel)
dW1 = (np.dot(dZ1,X.transpose()))/m
db1 = (np.sum(dZ1, axis = 1, keepdims = True))/m
在哪里
Z1 = np.dot(W1,X)+b1
A1 = np.where(Z1 > 0, Z1, Z1 * 0.01)
Z2 = np.dot(W2,A1)+b2
A2 = Z2*1
cost = np.sum(np.square(Y-A2))/m
和 Relu 导数:
def lrelu(rel):
alpha = 0.01
drel = np.ones_like(rel)
drel[rel < 0] = alpha
return drel
谢谢