PyTorch深度学习:利用pytorch实现线性回归

问题:

        若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)              #测试

你可能感兴趣的:(大数据,python,pytorch,计算机视觉)