详解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技术站