gpt4 book ai didi

python-3.x - pytorch 中的 apply(fn) 函数如何与没有 return 语句作为参数的函数一起工作?

转载 作者:行者123 更新时间:2023-12-04 01:10:26 25 4
gpt4 key购买 nike

我对以下代码片段有一些疑问:

>>> def init_weights(m):
print(m)
if type(m) == nn.Linear:
m.weight.data.fill_(1.0)
print(m.weight)

>>> net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
>>> net.apply(init_weights)

apply() 是 pytorch.nn 包的一部分。您可以在此包的文档中找到代码。最后的问题:
1. 为什么这个代码示例可以工作,尽管 init_weights() 在给 apply() 时没有添加参数或括号?
2. 函数 init_weights(m) 从哪里得到它的参数 m,当它作为参数给函数 apply() 时没有括号和一个 m?

最佳答案

我们在 torch.nn.Module.apply(fn) 的上述文档中找到了您问题的答案。 :

Applies fn recursively to every submodule (as returned by .children()) as well as self. Typical use includes initializing the parameters of a model (see also torch-nn-init).


  • 为什么这个代码示例可以工作,尽管在将它提供给 apply() 时没有将参数或括号添加到 init_weights()?
  • 给定函数init_weightsapply 之前不调用调用,正是因为没有括号,而是对 init_weights 的引用给 apply , 并且只能来自 apply稍后 init_weights叫做。
  • 当函数 init_weights(m) 作为参数提供给函数 apply() 而没有括号和 m 时,函数 init_weights(m) 从哪里得到它的参数 m?
  • 它在 apply 内的每个调用中获取其参数,并且,正如文档所述,它被称为迭代(在这种情况下)net 的每个子模块以及 net本身,由于方法调用 net.apply(…) .
  • 关于python-3.x - pytorch 中的 apply(fn) 函数如何与没有 return 语句作为参数的函数一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55613518/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com