关于Pytorch中parameters和buffer的理解

在深度学习训练过程中,有时需要在网络中添加额外的参数,这时候可有选择nn.Parameter()或者register_buffer()的方式,关于buffer和Parameter,我的理解是:它们都是可以随着model.cuda()一起加载到gpu上的,也可以一起被会保存在model.state_dict()中,但是不同之处在于,nn.Parameter()中的变量是可以计算梯度。并且会被optimizer.step()更新的,而register_buffer()一般来说,requires_grad默认为False,就是说一般不计算梯度,如果手动设置成True可以计算梯度,但是optimizer.step()时,并不会被更新。

import torch
from torch import nn
 
class mymodel(nn.Module):
    def __init__(self):
        super(mymodel, self).__init__()
        self.linear = nn.Linear(4, 1)
    def forward(self, x):
        return self.linear(x)
 
model = mymodel()
print(list(model.named_parameters()))

[(‘linear.weight’, Parameter containing:
tensor([[ 0.1173, -0.0988, -0.0900, -0.2869]], requires_grad=True)), (‘linear.bias’, Parameter containing:
tensor([-0.1965], requires_grad=True))]

注册weight parameters,名字为test

print('注册weight parameters,名字为test:')
my_test = nn.Parameter(torch.tensor([[-0.0995,  0.4867, -0.4920, -0.1703]]))
model.register_parameter('test',my_test)
print(list(model.named_parameters()))

[(‘test’, Parameter containing:
tensor([[-0.0995, 0.4867, -0.4920, -0.1703]], requires_grad=True)), (‘linear.weight’, Parameter containing:
tensor([[ 0.2731, 0.3823, -0.1088, -0.3679]], requires_grad=True)), (‘linear.bias’, Parameter containing:
tensor([-0.4443], requires_grad=True))]

See https://zhuanlan.zhihu.com/p/571590961?utm_id=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值