python 反传播_RELU反向传播

在尝试使用ReLU激活函数的神经网络反向传播过程中遇到错误,导致模型无法正常工作。问题出在ReLU的导数计算上,当前代码在第二和第三层的反向传播中使用了sigmoid的导数计算部分,而应使用ReLU的导数。已提供ReLU的导数定义和反向传播函数的部分代码,需要修正以使模型正确进行反向传播。
摘要由CSDN通过智能技术生成

在使用relu激活函数时,我在实现backprop时遇到了问题。我的模型有两个隐藏层,在两个隐藏层中有10个节点,在输出层中有一个节点(因此3个权重,3个偏差)。我的模型不适用于这个坏掉了的向后推功能。但是,该函数使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值