系列文章目录
pytorch优化器——add_param_group()介绍及示例、Yolov7 优化器代码示例
pytorch学习率设置——optimizer.param_groups、对不同层设置学习率、动态调整学习率
PyTorch学习——关于tensor、Variable、nn.Parameter()、叶子节点、非叶子节点、detach()函数、查看网络层参数
PyTorch model 返回函数总结——model.state_dict(),model.modules(),model.children(),model.parameters()
PyTorch模型参数初始化(weights_init)——torch.nn.init、加载预权重
文章目录
tensor、Variable、nn.Parameter()
tensor(张量)能够更方便地在GPU上进行运算。
Variable是对Tensor的封装,为了引入计算图(自动求导),方便构建神经网络。Variable、tensor默认 requires_grad=False。
nn.Parameter()是pytorch中定义可学习参数的一种方法,可进行梯度求导,是将一个不可训练的类型Tensor转换成可以训练的类型,默认require_grad=True。
叶子节点和非叶子节点
关于叶子节点:
叶子节点可以理解成不依赖其他tensor的tensor。
只有叶子张量在反向传播的过程中才会将本身的grad传入backward()计算。
require_grad=True:
默认情况下,非叶子节点的梯度值在反向传播过程中使用完后就会被清除,不会被保留。 默认情况下,只有叶子节点的梯度值能够被保留下来。
被保留下来的叶子节点的梯度值会存入tensor的grad属性中,在
optimizer.step()过程中会更新叶子节点的data属性值,从而实现参数的更新。
1.首先requires_grad这个是看用户需求进行设定,如果为false则把你视为叶子节点。requires_grad=False,而is_leaf=True,则不计算该张量的grad
2.如果requires_grad=True and is_leaf=True,则计算该张量的grad,并且把计算得到的grad放到该张量的grad属性里面,
3. requires_grad=True and is_leaf=False, 不保留grad.
4. 如果是非叶子节点,也就是requires_grad=True and is_leaf=False,则可以通过retain_grad()来得到grad。
reaquires_grad=False的张量都是叶子张量;requires_grad=True的张量