1.准备数据集
2.准备模型LinearModel,其中要实现构造函数和forward函数
3.准备MSE损失函数,和优化器
4.准备训练,先用model(x),调用forward计算y_hat,然后用损失函数计算loss,对loss进行backward得到梯度,用优化器optimizer.step()进行更新。最后进行一个预测,记得预测的x得是一个Tensor。
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): #用nn.Module构造一个类,即继承Module,需要实现__init__函数和forward函数
def __init__(self): #构造函数
super(LinearModel,self).__init__()
self.linear=torch.nn.Linear(1,1) #(Linear是继承自Module)构造Linear对象linear,输入样本和输出样本的维度,即特征数
def forward(self,x):
y_pred=self.linear(x) #可调用对象
return y_pred
model=LinearModel()
critertion=torch.nn.MSELoss(reduction = 'sum') #MSE也是Moudule的一个类,reduction='sum'返回的是损失总值,'mean'是均值
optimizer=torch.optim.SGD(model.parameters(),lr=0.01) #SGD是优化模块的一个类,parameters找到model中可训练的参数进行训练
for epoch in range(1000):
y_pred=model(x_data) #调用model的forward计算y_hat
#print(y_pred.data)
loss=critertion(y_pred,y_data) #forward: loss,
print(epoch,loss.item())
optimizer.zero_grad() #清空梯度
loss.backward() #backward自动计算梯度
optimizer.step() #更新w和b的值
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)