前言
b站刘洪普老师的pytorch入门课笔记。记录学习。
本文内容为线性回归示例。
方法
首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。 我们的线性回归模型是y= w*x + b。通过这个模型,我们对测试值x = 4.0 预测它的y值。
jupyter record
无需人工求梯度下降的导数,直接应用pytorch中的方法构造计算图即可。
1、module
所有的类都要继承于神经网络的基类nn.Module
2、loss
3、sgd optimizer
训练过程为前馈,反馈,更新。
import matplotlib as plt
import torch
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])
class LinearModel(torch.nn.Module):
def __init__(self):#构造函数
super(LinearModel,self).__init__()
self.linear = torch.nn.Linear(1,1)#构造包含权重和偏置b的对象,完成wx+b的计算
def forward(self,x):#forward() for __call__()
y_pred = self.linear(x)
return y_pred
model = LinearModel()
criterion = torch.nn.MSELoss(size_average = False)#使用y^和y计算损失,False表示非1/N
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)#计算所有的参数,学习率为0.01
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred,y_data)
print(epoch,loss.item())
optimizer.zero_grad()#梯度归0
loss.backward()#反向传播
optimizer.step()#梯度更新
print('w = ',model.linear.weight.item())
print('b = ',model.linear.bias.item())
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ',y_test.data)
0 12.930440902709961
1 6.04423713684082
2 2.974557399749756
3 1.6039438247680664
4 0.9897644519805908
5 0.7123865485191345
6 0.5850000381469727
7 0.524441659450531
8 0.4936887323856354
9 0.47625845670700073
…
996 2.9163902581785806e-07
997 2.87477632809896e-07
998 2.833462531270925e-07
999 2.7936749802393024e-07
w = 1.9996482133865356
b = 0.0007997381035238504
y_pred = tensor([[7.9994]])