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入门实例:mnist分类训练

    #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = ‘denny’ __time__ = ‘2017-9-9 9:03’ import torch import torchvision from torch.autograd import Variable import torch.utils…

    PyTorch 2023年4月8日
    00
  • requires_grad_()与requires_grad的区别,同时pytorch的自动求导(AutoGrad)

    1. 所有的tensor都有.requires_grad属性,可以设置这个属性.     x = tensor.ones(2,4,requires_grad=True) 2.如果想改变这个属性,就调用tensor.requires_grad_()方法:    x.requires_grad_(False) 3.自动求导注意点:   (1)  要想使x支持求导…

    PyTorch 2023年4月6日
    00
  • Pytorch 中 tensor的维度拼接

    torch.stack() 和 torch.cat() 都可以按照指定的维度进行拼接,但是两者也有区别,torch.satck() 是增加新的维度进行堆叠,即其维度拼接后会增加一个维度;而torch.cat() 是在原维度上进行堆叠,即其维度拼接后的维度个数和原来一致。具体说明如下: torch.stack(input,dim) input: 待拼接的张量序…

    PyTorch 2023年4月8日
    00
  • Pytorch加载.pth文件

    1. .pth文件 (The weights of the model have been saved in a .pth file, which is nothing but a pickle file of the model’s tensor parameters. We can load those into resnet18 using the m…

    2023年4月7日
    00
  • pytorch框架的详细介绍与应用详解

    下面是关于“PyTorch框架的详细介绍与应用详解”的完整攻略。 PyTorch简介 PyTorch是一个基于Python的科学计算库,它提供了两个高级功能:张量计算和深度学习。PyTorch的张量计算功能类似于NumPy,但可以在GPU上运行,这使得它非常适合于深度学习。PyTorch的深度学习功能包括自动求导、动态计算图和模型部署等功能。PyTorch的…

    PyTorch 2023年5月15日
    00
  • pytorch中的squeeze函数、cat函数使用

    PyTorch中的squeeze函数 在PyTorch中,squeeze函数用于去除张量中维度为1的维度。下面是squeeze函数的语法: torch.squeeze(input, dim=None, out=None) 其中,input表示输入的张量,dim表示要去除的维度,out表示输出的张量。如果dim=None,则去除所有维度为1的维度。 下面是一个…

    PyTorch 2023年5月15日
    00
  • pytorch神经网络实现的基本步骤

    转载自:https://blog.csdn.net/dss_dssssd/article/details/83892824 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/dss_dssssd/article/details/83892824  ——…

    PyTorch 2023年4月8日
    00
  • Pytorch 加载保存模型,进行模型推断【直播】2019 年县域农业大脑AI挑战赛—(三)保存结果

    在模型训练结束,结束后,通常是一个分割模型,输入 1024×1024 输出 4x1024x1024。 一种方法就是将整个图切块,然后每张预测,但是有个不好处就是可能在边界处断续。   由于这种切块再预测很ugly,所以直接遍历整个图预测(这就是相当于卷积啊),防止边界断续,还有一个问题就是防止图过大不能超过20M。 很有意思解决上边的问题。话也不多说了。直接…

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