问题:
若x=1,2,3与y=2,4,6一一对应,那么当x等于4时,y等于?
这次我们将利用PyTorch工具来实现线性回归
过程:
①:准备数据集
②:设计模型
③:构造损失函数和优化器
④:写训练周期
代码说明:
之前的forward()函数变为
y_pred = model(x_data)
loss()函数变为
criterion = torch.nn.MSELoss(size_average = False)
之前手动设定的梯度优化变为
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)
反向传播:
loss.backward()
梯度数值更新:
optimizer.step()
具体代码实现如下:
import torch
x_data = torch.tensor([[1.0],[2.0],[3.0]]) #将x_data设置为tensor类型数据
y_data = torch.tensor([[2.0],[4.0],[6.0]])
class LinearModel (torch.nn.Module):
def __init__ (self):
super(LinearModel,self).__init__() #继承父类
self.linear = torch.nn.Linear(1,1) #(1,1)指的是输入x,和y的特征维度
def forward(self,x):
y_pred = self.linear(x)
return y_pred
model = LinearModel()
criterion = torch.nn.MSELoss(size_average = False) #定义损失函数,不求平均损失
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01) #定义梯度优化器为随机梯度下降
for epoch in range(10000): #训练过程
y_pred = model (x_data) #向前传播,求y_pred
loss = criterion (y_pred,y_data) #根据y_pred和y_data求损失
print(epoch,loss)
optimizer.zero_grad() #将优化器数值清零
loss.backward() #反向传播,计算梯度
optimizer.step() #根据梯度更新参数
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) #测试