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日

相关文章

  • 关于tf.matmul() 和tf.multiply() 的区别说明

    tf.matmul()和tf.multiply()是TensorFlow中的两个重要函数,它们分别用于矩阵乘法和元素级别的乘法。本文将详细讲解tf.matmul()和tf.multiply()的区别,并提供两个示例说明。 tf.matmul()和tf.multiply()的区别 tf.matmul()和tf.multiply()的区别在于它们执行的操作不同。…

    PyTorch 2023年5月15日
    00
  • PyTorch中view的用法

    理解 我的理解就是将原来的tensor在进行维度的更改(根据参数的输入进行更改)后再进行输出,其实就是更换了tensor的一种查看方式 例子 a=torch.Tensor([[[1,2,3],[4,5,6]]]) b=torch.Tensor([1,2,3,4,5,6]) print(a.view(1,6)) print(b.view(1,6)) 输出结果为…

    PyTorch 2023年4月7日
    00
  • 超简单!pytorch入门教程(五):训练和测试CNN

    我们按照超简单!pytorch入门教程(四):准备图片数据集准备好了图片数据以后,就来训练一下识别这10类图片的cnn神经网络吧。 按照超简单!pytorch入门教程(三):构造一个小型CNN构建好一个神经网络,唯一不同的地方就是我们这次训练的是彩色图片,所以第一层卷积层的输入应为3个channel。修改完毕如下: 我们准备了训练集和测试集,并构造了一个CN…

    PyTorch 2023年4月6日
    00
  • pytorch中的model.eval()和BN层的使用

    PyTorch中的model.eval()和BN层的使用 在深度学习中,模型的训练和测试是两个不同的过程。在测试过程中,我们需要使用model.eval()函数来将模型设置为评估模式。此外,批量归一化(Batch Normalization,BN)层是一种常用的技术,可以加速模型的训练过程。本文将提供一个完整的攻略,介绍如何使用PyTorch中的model.…

    PyTorch 2023年5月15日
    00
  • pytorch 如何自定义卷积核权值参数

    PyTorch自定义卷积核权值参数 在PyTorch中,我们可以自定义卷积核权值参数。本文将介绍如何自定义卷积核权值参数,并提供两个示例。 示例一:自定义卷积核权值参数 我们可以使用nn.Parameter()函数创建可训练的权值参数。可以使用以下代码创建自定义卷积核权值参数: import torch import torch.nn as nn class…

    PyTorch 2023年5月15日
    00
  • windows 安装 pytorch

    之前都在服务器上跑pytorch,近来发现新版本可在windows上跑了,甚是开心。 环境: windows7  python3 无CPU 步骤: 1. 确保确保python版本在3.5.3/3.6.2及以上版本,更新时只需下载所需的python setup exe,会有更新提示,无需 2. 到pytorch官网 https://pytorch.org/  …

    2023年4月8日
    00
  • Pytorch统计参数网络参数数量方式

    PyTorch统计参数:网络参数数量方式 在深度学习中,了解模型的参数数量是非常重要的。在PyTorch中,我们可以使用torchsummary模块来统计模型的参数数量。本文将介绍两种不同的方式来统计模型的参数数量。 1. 使用torchsummary模块 torchsummary模块是一个用于打印PyTorch模型摘要的工具。它可以打印出模型的输入形状、输…

    PyTorch 2023年5月15日
    00
  • pytorch中的广播语义

    PyTorch中的广播语义 在本文中,我们将介绍PyTorch中的广播语义。广播语义是一种机制,它允许在不同形状的张量之间进行操作,而无需显式地扩展它们的形状。这使得我们可以更方便地进行张量运算,提高代码的可读性和简洁性。 示例一:使用广播语义进行张量运算 我们可以使用广播语义进行张量运算。示例代码如下: import torch # 创建张量 a = to…

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