np实现sigmoid_使用TensorFlow实现反向传播算法(二)

1.3 LeakyReLU函数导数

LeakyReLU 函数的表达式:

37d07f8b919be72cd58ffcbbd4250460.png

LeakyReLU的函数导数表达式:

94a13dbd1707b9453cec3cadfe9a7c4e.png

def leakyrelu(x, p):

y = np.copy(x)

y[y < 0] = p * y[y < 0]

return y

# 其中 p 为 LeakyReLU 的负半段斜率,为超参数

def leakyrelu_derivative(x, p):

dx = np.ones_like(x) # 创建梯度张量,全部初始化为 1

dx[x < 0] = p # 元素为负的导数为 p

return dx

x = np.arange(-6.0, 6.0, 0.1)

p = 0.1

leakyrelu_y = leakyrelu(x, p)

leakyrelu_derivative_y = leakyrelu_derivative(x, p)

set_plt_ax()

plt.plot(x, leakyrelu_y, color='C9', label='LeakyReLU')

plt.plot(x, leakyrelu_derivative_y, color='C4', label='导数')

plt.xlim(-6, 6)

plt.yticks(np.arange(-1, 7))

plt.legend(loc=2)

plt.show()

433e76b703142c13989ea9bb9af01a2e.png

1.4 Tanh 函数梯度

tanh函数的表达式:

e48b27dc99bf4f46b415f0fef7d99e38.png

tanh函数的导数表达式:

47ecd5e1d4c11a1aa600cacdd9de611a.png

def sigmoid(x): # sigmoid 函数实现

return 1 / (1 + np.exp(-x))

def tanh(x): # tanh 函数实现

return 2*sigmoid(2*x) - 1

def tanh_derivative(x): # tanh 导数实现

return 1-tanh(x)**2

x = np.arange(-6.0, 6.0, 0.1)

tanh_y = tanh(x)

tanh_derivative_y = tanh_derivative(x)

set_plt_ax()

plt.plot(x, tanh_y, color='C9', label='Tanh')

plt.plot(x, tanh_derivative_y, color='C4', label='导数')

plt.xlim(-6, 6)

plt.ylim(-1.5, 1.5)

plt.legend(loc=2)

plt.show()

a9ac0951f69a5196e9ab4101ab75e595.png

最后,小编想说:我是一名python开发工程师,
整理了一套最新的python系统学习教程,
想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助

反向传播算法是用于训练神经网络的一种常用方法,它通过计算损失函数关于模型参数的梯度,并沿着梯度的反方向更新参数,从而最小化损失函数。下面是一个简单的代码实现反向传播算法的例子: ```python # 假设有一个简单的神经网络,包括一个输入层、一个隐藏层和一个输出层 # 激活函数使用sigmoid函数 import numpy as np class NeuralNetwork: def __init__(self, input_size, hidden_size, output_size): # 初始化权重 self.W1 = np.random.randn(input_size, hidden_size) self.W2 = np.random.randn(hidden_size, output_size) def forward(self, X): # 前向传播 self.z = np.dot(X, self.W1) self.z2 = self.sigmoid(self.z) self.z3 = np.dot(self.z2, self.W2) y_hat = self.sigmoid(self.z3) return y_hat def sigmoid(self, x): # sigmoid激活函数 return 1 / (1 + np.exp(-x)) def backward(self, X, y, y_hat, learning_rate): # 反向传播 delta3 = (y_hat - y) * self.sigmoid_derivative(y_hat) dW2 = np.dot(self.z2.T, delta3) delta2 = np.dot(delta3, self.W2.T) * self.sigmoid_derivative(self.z2) dW1 = np.dot(X.T, delta2) # 更新权重 self.W1 -= learning_rate * dW1 self.W2 -= learning_rate * dW2 def sigmoid_derivative(self, x): # sigmoid函数的导数 return x * (1 - x) ``` 上述代码实现了一个简单的两层神经网络,包括一个输入层、一个隐藏层和一个输出层。其中,`forward`方法用于进行前向传播,`backward`方法用于进行反向传播并更新模型参数。在反向传播过程中,首先计算输出层的误差,然后反向计算隐藏层的误差,并根据误差计算权重的梯度。最后,根据学习率和梯度更新权重。 请注意,这只是一个简单的示例,实际应用中可能会有更复杂的网络结构和其他优化技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值