参数和子项有什么区别?

问题描述 投票:0回答:2

看起来

parameters
children
显示相同的信息,那么它们之间有什么区别?

import torch

print('torch.__version__', torch.__version__)

m = torch.load('imagenet_resnet18.pth')

print(m.parameters)
print(m.children)
python pytorch
2个回答
10
投票
  • model.parameters()
    是一个生成器,它返回包含模型参数的张量。
  • model.children()
    是一个返回模型层的生成器,您可以使用
    <layername>.weight
    <layername>.bias
  • 从中提取参数张量

访问此链接,获取有关访问和冻结模型层的简单教程。


2
投票

(仅在我写作期间)当前答案没有切中要点,因此在我看来具有误导性。根据当前文档(08/23/2022):

  • children()

    返回直接子模块的迭代器。

    这应该意味着它将停止在非叶节点,如

    torch.nn.Sequential
    torch.nn.ModuleList

  • parameters(recurse=True)

    返回模块参数的迭代器。这通常会传递给优化器

    “传递给优化器”应该意味着递归情况由团队处理。只需将返回值/对象传递给优化器即可。

因为我知道你是懒惰的开发人员,所以你必须阅读 PyTorch 论坛的这个答案才能看到某人完成的

children()
的输出:https://discuss.pytorch.org/t/module-children-vs-module -模块/4551/4?u=raining_day513

© www.soinside.com 2019 - 2024. All rights reserved.