前言
我们在使用pytorch搭建模型的时候,一般只关注模型的forward前向传播,backward后向传播过程中,模型梯度的计算以及参数的更新都是pytorch框架后台自动进行计算的,那么有的时候就会思考,pytorch到底是怎么进行计算的,产生的这些梯度以及参数是如何保存的,而我们想要访问又可以怎样来访问。带着这些疑问,我们来一一解开这些神秘的面纱。
tensor的grad属性
首先我们从tensor入手,pytorch中创建的张量,也就是tensor,默认情况下是没有grad梯度属性的。检查一个tensor是否有grad属性可以通过tensor.requires_grad来查看,如果tensor中有grad属性,则返回Ture,反之返回False。
那么我们如何在创建tensor的时候就让tensor具有grad属性呢?那就是要在创建tensor的时候将tensor的requires_grad属性设置为True。举个例子:
import torch
import torch.nn as nn
input = torch.tensor([1., 2., 3., 4.,])
print(input.requires_grad)
#False
input = torch.tensor([1., 2., 3., 4.,], requires_grad=True)
print(input.requires_grad)
#True
我们知道pytorch模型在训练过程中都是以tensor的数据结构进行输入输出计算的,那么tensor具有了grad属性是不是就意味着模型在训练的过程中,计算出来的grad都保存在相应的tensor中呢ÿ