PyTorch练手项目一:训练一个简单的线性回归

本文目的:展示如何利用PyTorch做一个简单的线性回归。

1 随机生成一些数据

#导入相关库
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
print("torch version: ", torch.__version__)  #torch version:  1.1.0


#随机生成一些点,并做成DataFrame
x = np.linspace(0, 5, 256)
noise = np.random.randn(256) * 2
y = x * 5 + 7 + noise
df = pd.DataFrame()
df['x'] = x
df['y'] = y

#可视化
sns.lmplot(x='x', y='y', data=df, height=4)

2 利用Pytorch进行线性回归

三部曲:准备数据,准备模型,训练。

#准备数据
train_x = x.reshape(-1, 1).astype('float32')
train_y = y.reshape(-1, 1).astype('float32')
train_x = torch.from_numpy(train_x)
train_y = torch.from_numpy(train_y)


#准备模型
model = nn.Linear(1, 1)


#定义训练参数
loss_fn = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
epochs = 3000

#开始训练
for i in range(1, epochs+1):
    optimizer.zero_grad()
    out = model(train_x)
    loss = loss_fn(out, train_y)
    loss.backward()
    optimizer.step()
    if(i % 300 == 0):
        print('epoch {}  loss {:.4f}'.format(i, loss.item())) 

3 结果可视化

#获取参数值
w, b = model.parameters()  #parameters()返回的是一个迭代器指向的对象
print(w.item(), b.item())  

#结果可视化
#model返回的是总tensor,包含grad_fn,用data提取出的tensor是纯tensor
pred = model.forward(train_x).data.numpy().squeeze() 
plt.plot(x, y, 'go', label='Truth', alpha=0.3)
plt.plot(x, pred, label='Predicted')
plt.legend()
plt.show()

4 小结

  • 数据生成和可视化方法

Reference

posted @ 2019-12-30 17:29  天地辽阔  阅读(1481)  评论(0编辑  收藏  举报