pytorch构建神经网络模型进行回归
时间: 2023-10-18 12:02:34 浏览: 93
下面是基于 PyTorch 构建神经网络模型进行回归的示例代码:
```python
import torch
import torch.nn as nn
from torch.utils.data import DataLoader, Dataset
# 定义数据集类
class MyDataset(Dataset):
def __init__(self, x_data, y_data):
self.x_data = x_data
self.y_data = y_data
def __getitem__(self, index):
x = self.x_data[index]
y = self.y_data[index]
return x, y
def __len__(self):
return len(self.x_data)
# 定义神经网络模型
class MyNet(nn.Module):
def __init__(self):
super(MyNet, self).__init__()
self.linear1 = nn.Linear(1, 10)
self.relu = nn.ReLU()
self.linear2 = nn.Linear(10, 1)
def forward(self, x):
x = self.linear1(x)
x = self.relu(x)
x = self.linear2(x)
return x
# 定义训练函数
def train(model, dataloader, criterion, optimizer, epochs):
for epoch in range(epochs):
for x, y in dataloader:
optimizer.zero_grad() # 梯度清零
y_pred = model(x) # 前向传播
loss = criterion(y_pred, y) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新参数
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, epochs, loss.item()))
# 构造数据
x_data = torch.randn(100, 1)
y_data = 3 * x_data + 2
dataset = MyDataset(x_data, y_data)
dataloader = DataLoader(dataset, batch_size=10, shuffle=True)
# 定义模型、损失函数和优化器
model = MyNet()
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# 训练模型
train(model, dataloader, criterion, optimizer, epochs=50)
# 预测结果
x_test = torch.Tensor([[1.0], [2.0], [3.0]])
y_test = model(x_test)
print(y_test)
```
在这个示例中,我们定义了一个简单的神经网络模型 `MyNet`,它包含一个输入层、一个隐藏层和一个输出层。我们使用均方误差作为损失函数,Adam 优化器来更新参数。然后我们构造了一个数据集 `MyDataset`,用 DataLoader 进行数据加载,并在数据集上训练模型。最后,我们使用训练好的模型对一些测试数据进行预测。
阅读全文