为什么static_dict() 返回的参数梯度是空 但是 parameters 是有值的?(pytorch)

在PyTorch中遇到一个问题,即使冻结了一些层,state_dict()在反向传播后仍显示权重梯度为None,而通过parameters()方法则能观察到参数梯度。原因是state_dict()默认不保留变量状态,需设置keep_vars=True来跟踪变量更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

因为要了解free layer到底有没有停止梯度的计算, 就用了modeld的2个模块A 启用了freeze, 另一个B未启用 .
接着在backward前后打印了state_dict()[“weight”].grad 发现无论AB, 在backpropagation前后一直是None , 我就以为freezelayer不管用
但是朋友用parameters 的方法打印就有值了 代码如下:
keep_vars=True



//1 可以看到这里我只冻住了模型的A模块  希望的结果应该是A 前后不变 但是B 会变化(这是我写的内置函数, 当输入为true的时候说明不需要让他计算梯度, 也就是require-grad = false)
self.freezeLayer(self.model.A, True)
self.freezeLayer(self.model.B, False)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值