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)的主要内容,如果未能解决你的问题,请参考以下文章