首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >model.parameters和model.parameters()的区别

model.parameters和model.parameters()的区别
EN

Stack Overflow用户
提问于 2022-03-07 05:04:26
回答 1查看 354关注 0票数 0

我已经阅读了这些文档,但我并不真正理解其中的解释。这是我从文档Returns an iterator over module parameters中得到的解释。为什么model.parameters()返回文件位置,例如<generator object Module.parameters at 0x7f1b90c29ad0>。model.parameters会给我一个输出

代码语言:javascript
复制
<bound method Module.parameters of ResNet9(
  (conv1): Sequential(
    (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU(inplace=True)
  )
  (conv2): Sequential(
    (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU(inplace=True)
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  ).....
EN

回答 1

Stack Overflow用户

发布于 2022-03-07 13:54:23

model.parameters()

这只是因为它返回一个迭代器对象,而不是列表或类似的东西。但它的行为非常类似于一个列表。你可以迭代它(如用

[x for x in model.parameters()]

或者您可以将其转换为列表。

[list(model.parameters())]

迭代器比列表有一些优点。当他们被创造出来的时候,他们没有被“计算”,这可以提高他们的性能。

有关迭代器的更多信息,只需谷歌搜索"python迭代器“,您就可以找到大量的信息。例如w3schools.com是一个很好的来源。

model.parameters

输出model.parameters由两部分组成。

第一部分bound method Module.parameters of告诉您,您正在引用Module.parameters方法。

第二部分告诉您有关包含引用方法的对象的更多信息。它是模型变量的“对象描述”。它和print(model)一样

关于python参考资料的更多信息

model.parameter只是对parameter函数的引用,而不是执行该函数。相反,model.parameter()正在执行它。

也许通过一个简单的例子,它会变得更清楚。

代码语言:javascript
复制
print("Hello world")
>>> Hello world
print
>>> <function print>

abc = print

abc("Hello world")
>>> Hello world
abc
>>> <function print>

正如您所看到的,abc的行为与print完全相同,因为我将print的引用分配给了abc

如果我执行函数,例如abc = print("Hello world"),abc将包含字符串Hello world,而不是要打印的函数引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71376622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档