import torch x_data =torch.tensor([[1.0],[2.0],[3.0]]) y_data=torch.tensor([[2.0],[4.0],[6.0]]) #重点在于构造计算图 pytorch会自动计算梯度 #Z=wx+b 就是一个线性单元 class LinearModel(torch.nn.Module): #Module的对象会自动实现backword()的过程 #构造函数 def __init__(self) : super(LinearModel, self).__init__() #Linear()构建y=wx+b,且继承于Module自动完成backword()的过程 self.linear=torch.nn.Linear(1,1) #前馈计算的函数 必须有 def forward(self,x): #调用linear的__call__(),在此函数中会调用forward() y_pred=self.linear(x) return y_pred #CallModel 可以直接调用 model=LinearModel() #调用损失函数 criterion=torch.nn.MSELoss(size_average=False) #优化器,lr学习率 optimizer=torch.optim.SGD(model.parameters(),lr=0.01) for epoch in range(1000): y_pred=model(x_data) loss=criterion(y_pred,y_data) print(epoch,loss.item()) #所有权重的梯度归0 optimizer.zero_grad() #进行反向传播 loss.backward() #根据梯度、学习率进行自动更新 optimizer.step() print("W=",model.linear.weight.item()) print("b=",model.linear.bias.item()) #Test Model x_test=torch.Tensor([4.0]) y_test=model(x_test) print("y_pred=",y_test.data)