PyTorch搭建一维线性回归模型(二)

yizhihongxing

PyTorch搭建一维线性回归模型(二)

在本文中,我们将继续介绍如何使用PyTorch搭建一维线性回归模型。本文将包含两个示例说明。

示例一:使用PyTorch搭建一维线性回归模型

我们可以使用PyTorch搭建一维线性回归模型。示例代码如下:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 创建数据集
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtype=np.float32)
y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)

# 转换为张量
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)

# 定义模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        out = self.linear(x)
        return out

model = LinearRegression()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    inputs = x_train
    targets = y_train

    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch+1) % 100 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 可视化结果
predicted = model(x_train).detach().numpy()
plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data')
plt.plot(x_train.numpy(), predicted, label='Fitted line')
plt.legend()
plt.show()

在上述代码中,我们首先创建了一个一维数据集x_trainy_train。然后,我们将数据集转换为张量,并定义了一个线性回归模型LinearRegression。接着,我们定义了损失函数和优化器,并使用训练集训练模型。最后,我们使用Matplotlib可视化了结果。

示例二:使用PyTorch搭建多项式回归模型

除了一维线性回归模型,我们还可以使用PyTorch搭建多项式回归模型。示例代码如下:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 创建数据集
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtype=np.float32)
y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)

# 转换为张量
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)

# 定义模型
class PolynomialRegression(nn.Module):
    def __init__(self):
        super(PolynomialRegression, self).__init__()
        self.poly = nn.Linear(3, 1)

    def forward(self, x):
        out = self.poly(x)
        return out

model = PolynomialRegression()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    inputs = torch.cat((x_train, x_train**2, x_train**3), 1)
    targets = y_train

    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch+1) % 100 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 可视化结果
x_plot = np.linspace(0, 12, 100)
x_plot_tensor = torch.from_numpy(x_plot.reshape(-1, 1))
y_plot_tensor = model(torch.cat((x_plot_tensor, x_plot_tensor**2, x_plot_tensor**3), 1)).detach()
y_plot = y_plot_tensor.numpy()
plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data')
plt.plot(x_plot, y_plot, label='Fitted line')
plt.legend()
plt.show()

在上述代码中,我们首先创建了一个一维数据集x_trainy_train。然后,我们将数据集转换为张量,并定义了一个多项式回归模型PolynomialRegression。接着,我们定义了损失函数和优化器,并使用训练集训练模型。最后,我们使用Matplotlib可视化了结果。

总结

本文介绍了如何使用PyTorch搭建一维线性回归模型和多项式回归模型,并提供了两个示例说明。我们可以使用PyTorch的nn.Module类定义模型,使用nn.MSELoss()函数定义损失函数,使用torch.optim.SGD()函数定义优化器,使用backward()函数进行反向传播,使用step()函数更新参数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch搭建一维线性回归模型(二) - Python技术站

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

相关文章

  • PyTorch中的CUDA怎么使用

    本篇内容主要讲解“PyTorch中的CUDA怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PyTorch中的CUDA怎么使用”吧! 前言 CUDA(Compute Unified Device Architecture)是NVIDIA推出的异构计算平台,PyTorch中有专门的模块torch.cuda来设…

    PyTorch 2023年4月8日
    00
  • 问题解决:RuntimeError: CUDA out of memory.(….; 5.83 GiB reserved in total by PyTorch)

    https://blog.csdn.net/weixin_41587491/article/details/105488239可以改batch_size 通常有64、32啥的

    PyTorch 2023年4月7日
    00
  • Ubuntu新建用户以及安装pytorch

    环境:Ubuntu18,Python3.6 首先登录服务器 ssh username@xx.xx.xx.xxx #登录一个已有的username 新建用户 sudo adduser username sudo usermod -aG sudo username 然后退出 exit 重新登录 ssh username@xx.xx.xx.xxx #这里是新创建的…

    PyTorch 2023年4月8日
    00
  • PyTorch实现简单的变分自动编码器VAE

          在上一篇博客中我们介绍并实现了自动编码器,本文将用PyTorch实现变分自动编码器(Variational AutoEncoder, VAE)。自动变分编码器原理与一般的自动编码器的区别在于需要在编码过程增加一点限制,迫使它生成的隐含向量能够粗略的遵循标准正态分布。这样一来,当需要生成一张新图片时,只需要给解码器一个标准正态分布的隐含随机向量就可…

    PyTorch 2023年4月8日
    00
  • Pytorch Distributed 初始化

    Pytorch Distributed 初始化方法 参考文献 https://pytorch.org/docs/master/distributed.html 代码https://github.com/overfitover/pytorch-distributed欢迎来star me. 初始化 torch.distributed.init_process_g…

    PyTorch 2023年4月6日
    00
  • PyTorch如何创建自己的数据集

    PyTorch如何创建自己的数据集 在本文中,我们将介绍如何使用PyTorch创建自己的数据集,以便在深度学习模型中使用。我们将提供两个示例,一个是图像数据集,另一个是文本数据集。 示例1:创建图像数据集 以下是一个创建图像数据集的示例代码: import torch from torch.utils.data import Dataset, DataLoa…

    PyTorch 2023年5月16日
    00
  • PyTorch 导数应用的使用教程

    PyTorch 导数应用的使用教程 PyTorch 是一个基于 Python 的科学计算库,它主要用于深度学习和神经网络。在 PyTorch 中,导数应用是非常重要的一个功能,它可以帮助我们计算函数的梯度,从而实现自动微分和反向传播。本文将详细讲解 PyTorch 导数应用的使用教程,并提供两个示例说明。 1. PyTorch 导数应用的基础知识 在 PyT…

    PyTorch 2023年5月16日
    00
  • 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
合作推广
合作推广
分享本页
返回顶部