基于PyTorch的神经网络之Regression的实现
在本文中,我们将介绍如何使用PyTorch实现一个简单的回归神经网络。我们将使用一个人工数据集来训练模型,并使用测试集来评估模型的性能。
数据集
我们将使用一个简单的人工数据集来训练模型。数据集包含两个特征和一个目标变量。我们将使用前两个特征来预测目标变量。示例代码如下:
import torch
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self, data, targets):
self.data = data
self.targets = targets
def __getitem__(self, index):
x = self.data[index]
y = self.targets[index]
return x, y
def __len__(self):
return len(self.data)
# 创建数据集
data = torch.randn(100, 2)
targets = 2 * data[:, 0] - 3 * data[:, 1] + 1
dataset = MyDataset(data, targets)
# 划分训练集和测试集
train_size = int(0.8 * len(dataset))
test_size = len(dataset) - train_size
train_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_size, test_size])
在上述代码中,我们创建了一个人工数据集MyDataset
,它包含两个特征和一个目标变量。我们使用前两个特征来预测目标变量。然后,我们将数据集划分为训练集和测试集。
模型
我们将使用一个简单的全连接神经网络来预测目标变量。该模型包含两个输入特征和一个输出变量。示例代码如下:
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(2, 1)
def forward(self, x):
x = self.fc1(x)
return x
# 创建模型
model = Net()
在上述代码中,我们定义了一个简单的全连接神经网络Net
,它包含一个输入层和一个输出层。输入层有两个神经元,输出层有一个神经元。然后,我们创建了一个模型实例model
。
训练模型
我们将使用均方误差(MSE)作为损失函数,使用随机梯度下降(SGD)作为优化器来训练模型。示例代码如下:
import torch.optim as optim
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(100):
running_loss = 0.0
for i, data in enumerate(train_dataset, 0):
inputs, labels = data
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_dataset)))
在上述代码中,我们定义了损失函数criterion
和优化器optimizer
。然后,我们使用训练集训练模型。在每个epoch中,我们遍历训练集,并计算损失函数和梯度。然后,我们使用优化器更新模型参数。
评估模型
我们将使用测试集来评估模型的性能。我们将计算模型的均方误差(MSE)和R平方值(R2)。示例代码如下:
import numpy as np
# 评估模型
with torch.no_grad():
predicted = model(test_dataset[:][0])
mse = criterion(predicted, test_dataset[:][1])
y_true = test_dataset[:][1].numpy()
y_pred = predicted.numpy().flatten()
r2 = 1 - np.sum((y_true - y_pred) ** 2) / np.sum((y_true - np.mean(y_true)) ** 2)
print('MSE: %.3f' % mse)
print('R2: %.3f' % r2)
在上述代码中,我们使用测试集评估模型的性能。我们计算模型的均方误差(MSE)和R平方值(R2)。MSE越小,模型的性能越好。R2越接近1,模型的性能越好。
总结
在本文中,我们介绍了如何使用PyTorch实现一个简单的回归神经网络。我们使用一个人工数据集来训练模型,并使用测试集来评估模型的性能。我们定义了一个全连接神经网络,使用均方误差(MSE)作为损失函数,使用随机梯度下降(SGD)作为优化器来训练模型。最后,我们计算了模型的均方误差(MSE)和R平方值(R2)来评估模型的性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Pytorch的神经网络之Regression的实现 - Python技术站