代码实现反向传播算法
时间: 2024-01-04 18:53:42 浏览: 90
反向传播算法是用于训练神经网络的一种常用方法,它通过计算损失函数关于模型参数的梯度,并沿着梯度的反方向更新参数,从而最小化损失函数。下面是一个简单的代码实现反向传播算法的例子:
```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`方法用于进行反向传播并更新模型参数。在反向传播过程中,首先计算输出层的误差,然后反向计算隐藏层的误差,并根据误差计算权重的梯度。最后,根据学习率和梯度更新权重。
请注意,这只是一个简单的示例,实际应用中可能会有更复杂的网络结构和其他优化技巧。
阅读全文