self.register_buffer()中的值发生变化

在PyTorch中,register_buffer用于定义不会在训练时更新的参数,但在保存模型时会包含。然而,文章提到当尝试修改buffer中的值时,发现其变化了。解决方案是使用clone来创建一个独立的副本进行操作,以保持buffer的原始状态不变。
摘要由CSDN通过智能技术生成

PyTorch中定义模型时,有时候会遇到self.register_buffer('name', Tensor)的操作,该方法的作用是定义一组参数,该组参数的特别之处在于:模型训练时不会更新(即调用 optimizer.step() 后该组参数不会变化,只可人为地改变它们的值),但是保存模型时,该组参数又作为模型参数不可或缺的一部分被保存。

但是在使用时发现,buffer里的值发生变化了。代码如下:

        grid_x = self.Theta
        grid_x[:,:,:,0] = grid_x[:,:,:,0] / (self.retinal_W/2) - 1

解决办法为使用clone

        grid_x = self.Theta.clone()
        grid_x[:,:,:,0] = grid_x[:,:,:,0] / (self.retinal_W/2) - 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值