PyTorch 教程-线性模型的训练
我们根据随机分配给它的参数绘制了我们的线性模型。我们发现它不能很好地拟合我们的数据。我们需要训练这个模型,使模型具有最佳的权重和偏差参数,并拟合这些数据。
训练模型的步骤如下:
步骤1
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 yloss=criterion(ypred,y) #Find losslosses.append() # Add loss in listoptimizer.zero_grad() # Set the gradient to zeroloss.backward() #To compute derivativesoptimizer.step() # Update the parameters
步骤4
plotfit('Trained Model')
👉点击领取:最全Python资料合集
完整代码
import torchimport torch.nn as nnimport matplotlib.pyplot as pltimport numpy as npX=torch.randn(100,1)*10y=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 predtorch.manual_seed(1) #For consistency of random resultmodel=LR(1,1)criterion=nn.MSELoss() #Using Loss Functionoptimizer=torch.optim.SGD(model.parameters(),lr=0.01) #Using optimizer which uses GD algorithmprint(model)[a,b]=model.parameters() #Unpacking of parametersepochs=100losses=[]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=titlea1,b1=grtparameters()x1=np.array([-30,30])y1=a1*x1+b1plt.plot(x1,y1,'r')plt.scatter(X,y)plt.show()plotfit('Trained Model')
热门推荐