我们根据随机分配给它的参数绘制了我们的线性模型。我们发现它不能很好地拟合我们的数据。我们需要训练这个模型,使模型具有最佳的权重和偏差参数,并拟合这些数据。

训练模型的步骤如下:

步骤1

我们的第一步是指定我们打算最小化的损失函数。PyTorch 提供了一种非常高效的方式来指定损失函数。PyTorch 提供了 MSELoss() 函数,也称为均方损失,用于计算损失,如下所示:

criterion=nn.MSELoss() 

步骤2

现在,我们的下一步是更新我们的参数。为此,我们指定使用梯度下降算法的优化器。我们使用 SGD() 函数,也称为随机梯度下降,进行优化。SGD 逐个样本地最小化总损失,通常更快地收敛,因为它经常在相同的样本大小内更新模型的权重。

optimizer=torch.optim.SGD(model.parameters(),lr=0.01)   

这里,lr 代表学习率,最初设置为 0.01。

步骤3

我们将为指定数量的周期训练我们的模型(我们计算了误差函数并反向传播了这个误差函数的梯度以更新权重)。

epochs=100 

现在,对于每个周期,我们必须最小化我们模型系统的误差。误差只是模型预测与实际值之间的比较。

Losses=[]  
For i in range (epochs):  
    ypred=model.forward(x)  #Prediction of y  
    loss=criterion(ypred,y) #Find loss  
    losses.append()     # Add loss in list   
    optimizer.zero_grad() # Set the gradient to zero  
    loss.backward() #To compute derivatives   
    optimizer.step()    # Update the parameters   

步骤4

最后,我们通过简单调用 plotfit() 方法绘制我们的新线性模型。

plotfit('Trained Model')  

完整代码

程序

import torch  
import torch.nn as nn  
import matplotlib.pyplot as plt  
import numpy as np  
X=torch.randn(100,1)*10  
y=X+3*torch.randn(100,1)  
plt.plot(X.numpy(),y.numpy(),'o')  
plt.ylabel('y')  
plt.xlabel('x')  
class LR(nn.Module):  
    def __init__(self,input_size,output_size):  
        super().__init__()  
        self.linear=nn.Linear(input_size,output_size)  
    def forward(self,x):  
        pred=self.linear(X)  
        return pred   
torch.manual_seed(1)    #For consistency of random result   
model=LR(1,1)  
criterion=nn.MSELoss()  #Using Loss Function  
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)  #Using optimizer which uses GD algorithm  
print(model)  
[a,b]=model.parameters()    #Unpacking of parameters  
epochs=100  
losses=[]  
for i in range(epochs):  
    ypred=model.forward(X)  
    loss=criterion(ypred,y)  
    print("epoch:",i,"loss:",loss.item())  
    losses.append(loss)  
    optimizer.zero_grad()  
    loss.backward()  
    optimizer.step()  
defgrtparameters():  
       return(a[0][0].item(),b[0].item())  
defplotfit(title):  
    plt.title=title  
    a1,b1=grtparameters()  
    x1=np.array([-30,30])  
    y1=a1*x1+b1  
    plt.plot(x1,y1,'r')  
    plt.scatter(X,y)  
    plt.show()  
plotfit('Trained Model')  

输出:

7-1.png

7-2.png

标签: Pytorch, Pytorch教程, Pytorch安装, Pytorch入门, Pytorch下载, Pytorch指南, Pytorch编程, Pytorch入门教程, Pytorch初级教程, Pytorch进阶, Pytorch高级教程, Pytorch学习, Pytorch库