Pytorch学习番外篇(2)——autograd与逻辑回归

一、autograd—自动求导系统

1、torch.autograd.backward()函数

      功能:自动求取梯度。

函数原型:

torch.autograd.backward(tensors,      => 用于求解梯度的张量
                        gradient,     => 多梯度权重
                        retain_graph, => 保存计算图
                        create_graph) => 创建导数计算图,用于高阶求导

应用举例:

参数 gradient:

import torch

x = torch.tensor([2.], requires_grad=True)
w = torch.tensor([1.], requires_grad=True)

a = torch.add(x, w)
b = torch.add(w, 1)

y0 = torch.mul(a, b) 
y1 = torch.add(a, b)

loss = torch.cat([y0, y1], dim=0)
grad_tensors = torch.tensor([1., 2.])	# 权重

loss.backward(gradient=grad_tensors) # 相当于 torch.autograd.backward(self, gradient, retain_graph, create_graph)
print(w.grad) 	# tensor([9.])

参数 retain_graph:

import torch

x = torch.tensor([2.], requires_grad=True)
w = torch.tensor([1.], requires_grad=True)

a = torch.add(x, w)
b = torch.add(w, 1)

y = torch.mul(a, b)

# y.backward(retain_grapg = False)  # 出现Bug   <= 计算图被自动清理
y.backward(retain_graph = True)     # 不出现Bug <= 计算图被手动保存
y.backward()

2、torch.autograd.grad()函数

      功能:求取梯度

函数原型:

torch.autograd.grad(outputs,      => 用于求导的张量,如loss
                    inputs,       => 需要梯度的张量
                    create_graph, => 创建倒数计算图,用于高阶求导
                    retain_graph, => 保存计算图
                    grad_outputs) => 多维度权重

应用举例:

import torch

x = torch.tensor([1.], requires_grad=True)
y = torch.pow(x, 2)

dy_dx = torch.autograd.grad(y, x, create_graph=True)
print("一阶导数dy/dx  = ", dy_dx)   

dy_dx2 = torch.autograd.grad(dy_dx[0], x)
print("二阶导数dy/dx2 = ",dy_dx2)

输出结果:

一阶导数dy/dx  =  (tensor([2.], grad_fn=<MulBackward0>),) # 元组tuple
二阶导数dy/dx2 =  (tensor([2.]),)

二、逻辑回归

求解机器学习问题的一般训练步骤:

数据 => 模型 => 损失函数 => 优化器 => 迭代训练
发布了27 篇原创文章 · 获赞 1 · 访问量 996

猜你喜欢

转载自blog.csdn.net/qq_41320782/article/details/104174832