我已经阅读了这些文档,但我并不真正理解其中的解释。这是我从文档Returns an iterator over module parameters中得到的解释。为什么model.parameters()返回文件位置,例如<generator object Module.parameters at 0x7f1b90c29ad0>。model.parameters会给我一个输出
<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)
).....发布于 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()正在执行它。
也许通过一个简单的例子,它会变得更清楚。
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,而不是要打印的函数引用。
https://stackoverflow.com/questions/71376622
复制相似问题