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

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中的gather使用方法

    PyTorch中的gather使用方法 在PyTorch中,gather是一个非常有用的函数,可以用于从一个张量中按照指定的索引收集元素。本文将介绍如何使用PyTorch中的gather函数,并演示两个示例。 示例一:使用gather函数从一个张量中按照指定的索引收集元素 import torch # 定义张量 x = torch.tensor([[1, 2…

    PyTorch 2023年5月15日
    00
  • Pytorch中的广播机制详解(Broadcast)

    PyTorch中的广播机制详解(Broadcast) 在PyTorch中,广播机制(Broadcast)是一种非常重要的机制,它可以使得不同形状的张量进行数学运算。本文将详细介绍PyTorch中的广播机制,包括广播规则、广播示例和广播注意事项等。 广播规则 广播机制是一种自动扩展张量形状的机制,使得不同形状的张量可以进行数学运算。在PyTorch中,广播规则…

    PyTorch 2023年5月15日
    00
  • 基于pytorch框架的yolov5训练与pycharm远程连接服务器

    yolov5 pytorch工程准备与环境部署 yolov5训练数据准备 yolov5训练 pycharm远程连接 pycharm解释器配置 测试 1.  yolov5 pytorch工程准备与环境部署 (1)下载yolov5工程pytorch版本源码 https://github.com/ultralytics/yolov5 (2)环境部署 用anacon…

    2023年4月8日
    00
  • pytorch版本PSEnet训练并部署方式

    PyTorch版本PSEnet训练并部署方式的完整攻略 PSEnet是一种用于文本检测的神经网络模型,它在文本检测任务中表现出色。本文将提供一个完整的攻略,介绍如何使用PyTorch训练PSEnet模型,并提供两个示例,分别是使用PSEnet进行文本检测和使用PSEnet进行文本识别。 训练PSEnet模型 以下是训练PSEnet模型的步骤: 准备数据集:首…

    PyTorch 2023年5月15日
    00
  • 动手学深度学习PyTorch版-task04

    课后习题 task0402.注意力机制与Seq2seq模型 不同的attetion layer的区别在于score函数的选择,在本节的其余部分,我们将讨论两个常用的注意层 Dot-product Attention 和 Multilayer Perceptron Attention;随后我们将实现一个引入attention的seq2seq模型并在英法翻译语料…

    2023年4月8日
    00
  • 安装pytorch-gpu的经验与教训

    首先说明 本文并不是安装教程,网上有很多,这里只是自己遇到的一些问题 我是以前安装的tensorflow-gpu的,但是发现现在的学术论文大部分都是用pytorch复现的,因此才去安装的pytorch-gpu 查看自己安装的CUDA nvcc -V 这里我提供一个安装tensorflow时所用的CUDA对应表      安装完CUDA时要改一下环境变量   …

    2023年4月6日
    00
  • 动手学pytorch-优化算法

    优化算法 1.Momentum 2.AdaGrad 3.RMSProp 4.AdaDelta 5.Adam 1.Momentum 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代…

    PyTorch 2023年4月7日
    00
  • pytorch 使用单个GPU与多个GPU进行训练与测试的方法

    在PyTorch中,我们可以使用单个GPU或多个GPU进行模型训练和测试。本文将详细讲解如何使用单个GPU和多个GPU进行训练和测试,并提供两个示例说明。 1. 使用单个GPU进行训练和测试 在PyTorch中,我们可以使用torch.cuda.device()方法将模型和数据移动到GPU上,并使用torch.nn.DataParallel()方法将模型复制…

    PyTorch 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部