写出bp算法的python代码
时间: 2024-11-12 08:16:17 浏览: 20
编写一个简单的BP(反向传播)算法的Python代码需要一些深度学习库,比如`numpy`来进行矩阵运算和`nn.Module`基础框架。以下是一个非常简化版的示例,假设我们有一个两层神经网络用于二分类任务:
```python
import numpy as np
from torch import nn
class TwoLayerNet(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(TwoLayerNet, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.fc2 = nn.Linear(hidden_size, output_size)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
z1 = self.fc1(x)
a1 = self.sigmoid(z1)
z2 = self.fc2(a1)
y_hat = self.sigmoid(z2)
return y_hat
# 定义模型参数
input_size = 4
hidden_size = 5
output_size = 2
model = TwoLayerNet(input_size, hidden_size, output_size)
# 假设输入X, 标签y
X = np.random.rand(10, input_size)
y = np.random.randint(2, size=(10, output_size))
# 梯度下降函数
def sgd(params, lr=0.01):
for param in params:
param -= lr * param.grad.data
# 反向传播和优化
for i in range(100): # 迭代次数
y_pred = model(X)
loss = nn.functional.binary_cross_entropy(y_pred, y)
# 反向传播
loss.backward()
# 更新权重
with torch.no_grad():
for param in model.parameters():
param.data -= lr * param.grad
# 清空梯度
model.zero_grad()
```
这只是一个非常基础的例子,实际应用中还需要更复杂的优化技巧,如批处理、学习率衰减等。
阅读全文