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_train
和y_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_train
和y_train
。然后,我们将数据集转换为张量,并定义了一个多项式回归模型PolynomialRegression
。接着,我们定义了损失函数和优化器,并使用训练集训练模型。最后,我们使用Matplotlib可视化了结果。
总结
本文介绍了如何使用PyTorch搭建一维线性回归模型和多项式回归模型,并提供了两个示例说明。我们可以使用PyTorch的nn.Module类定义模型,使用nn.MSELoss()函数定义损失函数,使用torch.optim.SGD()函数定义优化器,使用backward()函数进行反向传播,使用step()函数更新参数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch搭建一维线性回归模型(二) - Python技术站