pytorch线性回归
时间: 2023-10-18 10:14:43 浏览: 89
PyTorch是一个基于Python的科学计算包,主要针对两类人群:第一类是使用NumPy进行科学计算的人群,第二类是使用GPU进行科学计算的人群。
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)
# 定义模型
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 = torch.from_numpy(x_train)
targets = torch.from_numpy(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(torch.from_numpy(x_train)).detach().numpy()
plt.plot(x_train, y_train, 'ro', label='Original data')
plt.plot(x_train, predicted, label='Fitted line')
plt.legend()
plt.show()
```
这个示例代码中,我们首先定义了一个数据集,包括15个样本,每个样本包括一个输入特征和一个输出标签。然后,我们定义了一个线性回归模型,并定义了损失函数和优化器。接下来,我们训练模型,使用随机梯度下降算法来更新模型参数,直到达到预定的训练轮数。最后,我们可视化了模型的拟合结果。
在这个示例代码中,我们使用了PyTorch的自动微分功能来计算梯度,这使得训练模型变得非常容易。同时,PyTorch还提供了许多高级功能,如自定义损失函数和优化器,使得我们可以进一步优化模型的性能。
阅读全文