Python PyTorch:What';状态和参数()之间的区别是什么?
为了在pytorch中访问模型的参数,我看到了两种方法: 使用和使用 我想知道有什么区别,或者一个是好习惯,另一个是坏习惯 谢谢参数()仅提供模块参数,即重量和偏差 返回模块参数的迭代器 您可以检查参数列表,如下所示:Python PyTorch:What';状态和参数()之间的区别是什么?,python,machine-learning,deep-learning,pytorch,Python,Machine Learning,Deep Learning,Pytorch,为了在pytorch中访问模型的参数,我看到了两种方法: 使用和使用 我想知道有什么区别,或者一个是好习惯,另一个是坏习惯 谢谢参数()仅提供模块参数,即重量和偏差 返回模块参数的迭代器 您可以检查参数列表,如下所示: for name, param in model.named_parameters(): if param.requires_grad: print(name) 另一方面,返回包含模块整个状态的字典。检查its,它不仅包含对参数的调用,还包含缓冲区等 包
for name, param in model.named_parameters():
if param.requires_grad:
print(name)
另一方面,返回包含模块整个状态的字典。检查its,它不仅包含对参数的调用
,还包含缓冲区
等
包括参数和持久缓冲区(例如运行平均值)。键是相应的参数和缓冲区名称
使用以下方法检查state\u dict
包含的所有钥匙:
model.state_dict().keys()
例如,在state\u dict
中,您会发现bn1.running\u意味着和running\u var
,它们在.parameters()
中不存在
如果你只想访问参数,你可以简单地使用.parameters()
,而为了像在迁移学习中那样保存和加载模型,你需要保存state_dict
,而不仅仅是参数。除了@kHarshit的答案不同,属性需要net.parameters()
中可训练张量的梯度为True
,而net.state\u dict()
是否还有第三种访问参数的方法,对于向量运算返回所有参数的张量?我想参数()
是返回所有参数的最简单方法(可能是唯一方法)。其他方法,如果存在的话,可能只需要调用它。如果你能看看我的另一个问题,并提出实现更新规则的正确方法,我将非常感谢有人能解释为什么会有这种差异吗??此外,我实际上使用torch.equal从model.named_parameters和model.state_dict映射张量,甚至在运行back pass之前(因此没有更新),这两个张量是不同的。任何关于为什么会这样的想法。