详解Pytorch 使用Pytorch拟合多项式(多项式回归)

yizhihongxing

详解PyTorch 使用PyTorch拟合多项式(多项式回归)

多项式回归是一种常见的回归问题,它可以用于拟合非线性数据。在本文中,我们将介绍如何使用PyTorch实现多项式回归,并提供两个示例说明。

示例1:使用多项式回归拟合正弦函数

以下是一个使用多项式回归拟合正弦函数的示例代码:

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

# Generate data
np.random.seed(42)
x = np.linspace(-np.pi, np.pi, 200)
y = np.sin(x) + np.random.randn(len(x)) * 0.1

# Convert data to tensors
x = torch.from_numpy(x).float().view(-1, 1)
y = torch.from_numpy(y).float().view(-1, 1)

# Define polynomial regression model
class PolyRegression(nn.Module):
    def __init__(self, input_size, output_size):
        super(PolyRegression, self).__init__()
        self.fc = nn.Linear(input_size, output_size)

    def forward(self, x):
        out = torch.cat([x ** i for i in range(1, 6)], 1)
        out = self.fc(out)
        return out

# Define hyperparameters
input_size = 5
output_size = 1
num_epochs = 1000
learning_rate = 0.01

# Define model, loss function, and optimizer
model = PolyRegression(input_size, output_size)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

# Train model
for epoch in range(num_epochs):
    optimizer.zero_grad()
    outputs = model(x)
    loss = criterion(outputs, y)
    loss.backward()
    optimizer.step()

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

# Test model
with torch.no_grad():
    predicted = model(x)
    plt.plot(x.numpy(), y.numpy(), 'ro', label='True')
    plt.plot(x.numpy(), predicted.numpy(), label='Predicted')
    plt.legend()
    plt.show()

在这个示例中,我们首先生成了一些随机数据,并将其转换为PyTorch张量。然后,我们定义了一个PolyRegression类来实现多项式回归模型。在训练过程中,我们使用均方误差损失函数和随机梯度下降优化器来训练模型。在测试过程中,我们使用训练好的模型对数据进行预测,并将结果可视化。

示例2:使用多项式回归拟合二次函数

以下是一个使用多项式回归拟合二次函数的示例代码:

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

# Generate data
np.random.seed(42)
x = np.linspace(-5, 5, 200)
y = x ** 2 + np.random.randn(len(x)) * 2

# Convert data to tensors
x = torch.from_numpy(x).float().view(-1, 1)
y = torch.from_numpy(y).float().view(-1, 1)

# Define polynomial regression model
class PolyRegression(nn.Module):
    def __init__(self, input_size, output_size):
        super(PolyRegression, self).__init__()
        self.fc = nn.Linear(input_size, output_size)

    def forward(self, x):
        out = torch.cat([x ** i for i in range(1, 3)], 1)
        out = self.fc(out)
        return out

# Define hyperparameters
input_size = 2
output_size = 1
num_epochs = 1000
learning_rate = 0.01

# Define model, loss function, and optimizer
model = PolyRegression(input_size, output_size)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

# Train model
for epoch in range(num_epochs):
    optimizer.zero_grad()
    outputs = model(x)
    loss = criterion(outputs, y)
    loss.backward()
    optimizer.step()

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

# Test model
with torch.no_grad():
    predicted = model(x)
    plt.plot(x.numpy(), y.numpy(), 'ro', label='True')
    plt.plot(x.numpy(), predicted.numpy(), label='Predicted')
    plt.legend()
    plt.show()

在这个示例中,我们首先生成了一些随机数据,并将其转换为PyTorch张量。然后,我们定义了一个PolyRegression类来实现多项式回归模型。在训练过程中,我们使用均方误差损失函数和随机梯度下降优化器来训练模型。在测试过程中,我们使用训练好的模型对数据进行预测,并将结果可视化。

总结

在本文中,我们介绍了如何使用PyTorch实现多项式回归,并提供了两个示例说明。这些技术对于在深度学习中处理非线性数据非常有用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Pytorch 使用Pytorch拟合多项式(多项式回归) - Python技术站

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

相关文章

  • Pytorch:Tensor

    从接口的角度来讲,对tensor的操作可分为两类: torch.function,如torch.save等。 另一类是tensor.function,如tensor.view等。 为方便使用,对tensor的大部分操作同时支持这两类接口,在此不做具体区分,如torch.sum (torch.sum(a, b))与tensor.sum (a.sum(b))功能…

    2023年4月6日
    00
  • Pytorch 中net.train 和 net.eval的使用说明

    在PyTorch中,我们可以使用net.train()和net.eval()方法来切换模型的训练模式和评估模式。这两个方法的主要区别在于是否启用了一些特定的模块,例如Dropout和Batch Normalization。在本文中,我们将详细介绍net.train()和net.eval()的使用说明,并提供两个示例来说明它们的用法。 net.train()和…

    PyTorch 2023年5月15日
    00
  • win10 pytorch1.4.0 安装

    win10 pytorch1.4.0 安装   首先感谢各位前人的经验,我是在参考了很多经验后才装好的呢~ 下面是简化步骤:   1.安装anaconda 或者 miniconda   2.利用conda 创建虚拟环境   3.如果要装GPU版本的需要查看自己适合的版本   4.利用conda 或者 pip 命令进行 install 需要的一系列东西0 0 …

    PyTorch 2023年4月8日
    00
  • pytorch遇到的问题:RuntimeError: randperm is only implemented for CPU

    由此,我们找到sample.py,第51行如下图修改

    2023年4月8日
    00
  • pytorch搭建网络模型的4种方法

    import torch import torch.nn.functional as F from collections import OrderedDict   # Method 1 —————————————–   class Net1(torch.nn.Module):   def __init_…

    PyTorch 2023年4月7日
    00
  • 教你一分钟在win10终端成功安装Pytorch的方法步骤

    PyTorch安装教程 PyTorch是一个基于Python的科学计算库,它支持GPU加速,提供了丰富的神经网络模块,可以用于自然语言处理、计算机视觉、强化学习等领域。本文将提供详细的PyTorch安装教程,以帮助您在Windows 10上成功安装PyTorch。 步骤一:安装Anaconda 在开始安装PyTorch之前,您需要先安装Anaconda。An…

    PyTorch 2023年5月16日
    00
  • 超简单!pytorch入门教程(二):Autograd

    一、autograd自动微分 autograd是专门为了BP算法设计的,所以这autograd只对输出值为标量的有用,因为损失函数的输出是一个标量。如果y是一个向量,那么backward()函数就会失效。不知道BP算法是什么的同学,估计也不知道什么是深度学习,建议先看Zen君提供的教材。 二、autograd的内部机理 variable是tensor的外包装…

    PyTorch 2023年4月6日
    00
  • pytorch中的size()、 squeeze()函数

    size() size()函数返回张量的各个维度的尺度。 squeeze() squeeze(input, dim=None),如果不给定dim,则把input的所有size为1的维度给移除;如果给定dim,则只移除给定的且size为1的维度。

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