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

详解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 对应点相乘、矩阵相乘实例

    在PyTorch中,我们可以使用*运算符进行对应点相乘,使用torch.mm函数进行矩阵相乘。以下是两个示例说明。 示例1:对应点相乘 import torch # 定义两个张量 a = torch.tensor([[1, 2], [3, 4]]) b = torch.tensor([[5, 6], [7, 8]]) # 对应点相乘 c = a * b # …

    PyTorch 2023年5月16日
    00
  • PyTorch Softmax

    PyTorch provides 2 kinds of Softmax class. The one is applying softmax along a certain dimension. The other is do softmax on a spatial matrix sized in B, C, H, W. But it seems like…

    2023年4月8日
    00
  • pytorch dataloader num_workers

    https://discuss.pytorch.org/t/guidelines-for-assigning-num-workers-to-dataloader/813/5 num_workers 影响机器性能

    PyTorch 2023年4月7日
    00
  • NLP(五):BiGRU_Attention的pytorch实现

    一、预备知识 1、nn.Embedding 在pytorch里面实现word embedding是通过一个函数来实现的:nn.Embedding. # -*- coding: utf-8 -*- import numpy as np import torch import torch.nn as nn import torch.nn.functional a…

    PyTorch 2023年4月7日
    00
  • 利用BERT得到句子的表示向量(pytorch)

      在文本分类和文本相似度匹配中,经常用预训练语言模型BERT来得到句子的表示向量,下面给出了pytorch环境下的操作的方法: 这里使用huggingface的transformers中BERT, 需要先安装该依赖包(pip install transformers) 具体实现如下: import torch from tqdm import tqdm i…

    PyTorch 2023年4月8日
    00
  • PyTorch入门基础

    什么是 PyTorch ? PyTorch是一个python库,它主要提供了两个高级功能: GPU加速的张量计算 构建在反向自动求导系统上的深度神经网络 1. 定义数据 一般定义数据使用torch.Tensor ,可以定义多种类型, tensor的意思是张量,是数字各种形式的总称 import torch # 可以是一个数 x = torch.tensor(…

    2023年4月8日
    00
  • Pytorch 之激活函数

    1. Sigmod 函数    Sigmoid 函数是应用最广泛的非线性激活函数之一,它可以将值转换为 $0$ 和 $1$ 之间,如果原来的输出具有这样的特点:值越大,归为某类的可能性越大,    那么经过 Sigmod 函数处理的输出就可以代表属于某一类别的概率。其数学表达式为: $$y = frac{1}{1 + e^{-x}} = frac{e^{x}…

    2023年4月6日
    00
  • pytorch入门1——简单的网络搭建

    代码如下: %matplotlib inline import torch import torch.nn as nn import torch.nn.functional as F from torchsummary import summary from torchvision import models class Net(nn.Module): de…

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