pytorch创建一个BP神经网络,可以处理10个输入,2个输出的非线性系统。提供训练,验证,测试的所有完整具体代码
时间: 2024-12-17 11:16:23 浏览: 8
在PyTorch中,我们可以使用`nn.Module`作为基础框架来创建一个简单的前馈神经网络(Feedforward Neural Network),用于处理非线性的10个输入到2个输出的问题。下面是一个完整的示例,包括定义模型、损失函数、优化器以及训练、验证和测试的步骤:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class BPNet(nn.Module):
def __init__(self, input_size=10, hidden_layers=[64], output_size=2):
super(BPNet, self).__init__()
# 创建隐藏层
layers = []
for h_size in hidden_layers:
layers.append(nn.Linear(input_size, h_size))
layers.append(nn.ReLU())
input_size = h_size
# 输出层
layers.append(nn.Linear(hidden_layers[-1], output_size)) # 使用最后一个隐藏层的大小作为输出层的输入
self.model = nn.Sequential(*layers)
def forward(self, x):
return self.model(x)
# 创建模型实例
input_size = 10
output_size = 2
hidden_layers = [64] # 可以自定义层数和节点数
model = BPNet(input_size, hidden_layers, output_size)
# 假设我们有二分类任务,所以用交叉熵损失
criterion = nn.CrossEntropyLoss()
# 假设我们使用随机数据进行演示,实际应用中需要加载数据
# 训练数据
train_data = torch.randn(100, input_size)
train_labels = torch.randint(0, 2, (100,))
# 验证数据
val_data = torch.randn(50, input_size)
val_labels = torch.randint(0, 2, (50,))
# 测试数据
test_data = torch.randn(20, input_size)
test_labels = torch.randint(0, 2, (20,))
# 优化器
optimizer = optim.SGD(model.parameters(), lr=0.01) # 使用SGD优化器,可根据需要选择其他优化器
# 训练循环
num_epochs = 10
for epoch in range(num_epochs):
# 训练阶段
model.train()
optimizer.zero_grad()
outputs = model(train_data)
loss = criterion(outputs, train_labels)
loss.backward()
optimizer.step()
# 验证阶段
model.eval()
with torch.no_grad():
val_outputs = model(val_data)
val_loss = criterion(val_outputs, val_labels)
print(f"Epoch {epoch + 1}/{num_epochs}, Train Loss: {loss.item()}, Val Loss: {val_loss.item()}")
# 测试阶段
model.eval()
with torch.no_grad():
test_outputs = model(test_data)
_, predicted_test_labels = torch.max(test_outputs.data, 1)
accuracy = (predicted_test_labels == test_labels).sum().item() / len(test_labels)
print(f"Test Accuracy: {accuracy}")
```
阅读全文