gpt4 book ai didi

python - RELU 反向传播

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:14 31 4
gpt4 key购买 nike

我在使用 relu 激活函数时无法实现反向传播。我的模型有两个隐藏层,两个隐藏层都有 10 个节点,输出层有一个节点(因此有 3 个权重,3 个偏差)。除了这个损坏的 backward_prop 函数之外,我的模型还有效。但是,该函数使用 sigmoid 激活函数(作为注释包含在函数中)与 backprop 一起使用。因此,我相信我搞砸了 relu 推导。

谁能把我推向正确的方向?

# The derivative of relu function is 1 if z > 0, and 0 if z <= 0
def relu_deriv(z):
z[z > 0] = 1
z[z <= 0] = 0
return z

# Handles a single backward pass through the neural network
def backward_prop(X, y, c, p):
"""
cache (c): includes activations (A) and linear transformations (Z)
params (p): includes weights (W) and biases (b)
"""
m = X.shape[1] # Number of training ex
dZ3 = c['A3'] - y
dW3 = 1/m * np.dot(dZ3,c['A2'].T)
db3 = 1/m * np.sum(dZ3, keepdims=True, axis=1)
dZ2 = np.dot(p['W3'].T, dZ3) * relu_deriv(c['A2']) # sigmoid: replace relu_deriv w/ (1-np.power(c['A2'], 2))
dW2 = 1/m * np.dot(dZ2,c['A1'].T)
db2 = 1/m * np.sum(dZ2, keepdims=True, axis=1)
dZ1 = np.dot(p['W2'].T,dZ2) * relu_deriv(c['A1']) # sigmoid: replace relu_deriv w/ (1-np.power(c['A1'], 2))
dW1 = 1/m * np.dot(dZ1,X.T)
db1 = 1/m * np.sum(dZ1, keepdims=True, axis=1)

grads = {"dW1":dW1,"db1":db1,"dW2":dW2,"db2":db2,"dW3":dW3,"db3":db3}
return grads

最佳答案

您的代码是否抛出错误或您的训练有问题?你能说清楚吗?

或者如果你处理二元分类,你能不能尝试只让你的输出激活函数 sigmoid 而其他的 ReLU?

请说明具体情况。

编辑回复:

你能试试这个吗?

 def dReLU(x):
    return 1. * (x > 0)

我指的是:https://gist.github.com/yusugomori/cf7bce19b8e16d57488a

关于python - RELU 反向传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52789826/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com