pytorch学习笔记:线性回归(用pytorchAPI)

Posted Z|Star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch学习笔记:线性回归(用pytorchAPI)相关的知识,希望对你有一定的参考价值。

步骤:
1、准备训练集
2、设计模型
3、创建损失函数和优化器
4、训练
在这里插入图片描述

def func(*args, **kwargs):
    print(args)
    print(kwargs)

func(1,2,3,4,a=1,b=2,c=3)


输出:
(1, 2, 3, 4)
{'a': 1, 'b': 2, 'c': 3}

定义函数时,*args作用:传入参数个数不限
**kwargs作用:将“a=1”形式的参数转化成字典

准备训练集
数据集和之前本专栏第一篇的线性模型一样

设计模型

class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)  # 1,1表示设置的线性模型中有两个参数w和b

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred


model = LinearModel()

pytorch的nn库中有许多默认模型,nn即neural network

函数torch.nn.Linear(in_features,out_features,bias=True)
in_features:指的是输入的二维张量的大小
out_features指的是输出的二维张量的大小
偏置bias默认为True

创建损失函数和优化器

criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

损失函数这里采用了MSELoss:MSE即(y’-y)^2,size_average即是否/N,除不除一般差不多
torch.optim.SGD(model.parameters(), lr=0.01)中
model.parameters()为模型的参数
使用时,它会检测实例化的model中所有成员中的参数,比如本例中的model下有liner成员,liner中有w和b两个参数,运行本条语句,即告诉程序有这两个参数需要梯度下降。
lr即学习率

训练

for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print (epoch,loss)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

optimizer.zero_grad()梯度清零不可少
optimizer.step()更新update

检测

# Output weight and bias
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)

顺便提一下交叉验证集的意义:当训练次数过多时候,容易发生过拟合,这时候在训练集上切出一部分做交叉验证集,分训练次数进行画图,如果验证集的损失函数上升就代表次数过多了,发生过拟合。

完整代码:

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):
    def __init__(self):
        super(LinearModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)  # 1,1表示设置的线性模型中有两个参数w和b

    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(100):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print (epoch,loss)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

# Output weight and bias
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)

除了SGD,pytorch还有其它的优化器,这里不作进一步研究
在这里插入图片描述

以上是关于pytorch学习笔记:线性回归(用pytorchAPI)的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch学习笔记 8. 实现线性回归模型

PyTorch学习笔记 8. 实现线性回归模型

神经网络和深度学习-用pytorch实现线性回归

机器学习:线性模型学习总结:基于PyTorch的线性模型

pytorch学习笔记

Pytorch学习2020春-1-线性回归