基于Pytorch的神经网络之Regression的实现

基于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技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    一、先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。 1.squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。 2.a.squeeze(N) 就是去掉a中指定的维数为一的维度。   还有一种形式就是b=…

    PyTorch 2023年4月7日
    00
  • 解决安装torch后,torch.cuda.is_available()结果为false的问题

    在安装PyTorch后,有时会出现torch.cuda.is_available()返回false的问题。本文将提供两种解决方案。 解决方案1:安装正确的CUDA版本 如果您的CUDA版本与PyTorch版本不兼容,torch.cuda.is_available()将返回false。要解决这个问题,您需要安装与您的PyTorch版本兼容的CUDA版本。 您可…

    PyTorch 2023年5月15日
    00
  • PyTorch实现多维度特征输入逻辑回归

    PyTorch实现多维度特征输入逻辑回归 在PyTorch中,逻辑回归是一种用于二分类问题的机器学习算法。在本文中,我们将介绍如何使用PyTorch实现多维度特征输入逻辑回归,并提供两个示例说明。 示例1:使用PyTorch实现二分类逻辑回归 以下是一个使用PyTorch实现二分类逻辑回归的示例代码: import torch import torch.nn…

    PyTorch 2023年5月16日
    00
  • 在pytorch 中计算精度、回归率、F1 score等指标的实例

    在PyTorch中计算精度、回归率、F1 score等指标的实例 在本文中,我们将介绍如何在PyTorch中计算精度、回归率、F1 score等指标。我们将使用两个示例来说明如何完成这些步骤。 示例1:计算分类问题的精度、召回率和F1 score 以下是在PyTorch中计算分类问题的精度、召回率和F1 score的步骤: import torch impo…

    PyTorch 2023年5月15日
    00
  • PyTorch中反卷积的用法详解

    PyTorch中反卷积的用法详解 在本文中,我们将介绍PyTorch中反卷积的用法。我们将提供两个示例,一个是使用预训练模型,另一个是使用自定义模型。 示例1:使用预训练模型 以下是使用预训练模型进行反卷积的示例代码: import torch import torchvision.models as models import torchvision.tr…

    PyTorch 2023年5月16日
    00
  • pytorch中动态调整学习率

    https://blog.csdn.net/bc521bc/article/details/85864555 这篇bolg说的很详细了,但是具体在代码中怎么用还是有点模糊。自己试验了一下,顺路记一下,其实很简单,在optimizer后面定义一下,然后在每个epoch中step一下就可以了。一开始出错是因为我把step放到 T_optimizer.step()…

    PyTorch 2023年4月6日
    00
  • PyTorch中的squeeze()和unsqueeze()解析与应用案例

    PyTorch中的squeeze()和unsqueeze()解析与应用案例 在PyTorch中,squeeze()和unsqueeze()是两个非常有用的函数,可以用于改变张量的形状。本文将介绍这两个函数的用法,并提供两个示例说明。 1. squeeze()函数 squeeze()函数可以用于删除张量中维度为1的维度。以下是一个示例,展示如何使用squeez…

    PyTorch 2023年5月15日
    00
  • Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛—(四)模型构建和网络训练

    对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024。 我没有使用二分类,直接使用了四分类。 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始化。为了加快训练,1024输入进网络后直接通过 pooling缩小到256的尺寸,等到输出层,直接使用bilinear放大4倍,相当于直接在256的尺寸上训练。…

    2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部