Python PyTorch:What';状态和参数()之间的区别是什么?

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,它不仅包含对参数的调用,还包含缓冲区等 包

为了在pytorch中访问模型的参数,我看到了两种方法:

使用和使用

我想知道有什么区别,或者一个是好习惯,另一个是坏习惯

谢谢参数()仅提供模块参数,即重量和偏差

返回模块参数的迭代器

您可以检查参数列表,如下所示:

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之前(因此没有更新),这两个张量是不同的。任何关于为什么会这样的想法。