一、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)
print(w.grad)
参数 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_graph = True)
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>),)
二阶导数dy/dx2 = (tensor([2.]),)
二、逻辑回归
求解机器学习问题的一般训练步骤:
数据 => 模型 => 损失函数 => 优化器 => 迭代训练