看起来
parameters
和children
显示相同的信息,那么它们之间有什么区别?
import torch
print('torch.__version__', torch.__version__)
m = torch.load('imagenet_resnet18.pth')
print(m.parameters)
print(m.children)
model.parameters()
是一个生成器,它返回包含模型参数的张量。model.children()
是一个返回模型层的生成器,您可以使用 <layername>.weight
或 <layername>.bias
访问此链接,获取有关访问和冻结模型层的简单教程。
(仅在我写作期间)当前答案没有切中要点,因此在我看来具有误导性。根据当前文档(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