import torchx_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())#所有权重的梯度归0optimizer.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)