Python 3.x pytorch中的apply(fn)函数如何处理没有返回语句作为参数的函数?
我对以下代码片段有一些疑问:Python 3.x pytorch中的apply(fn)函数如何处理没有返回语句作为参数的函数?,python-3.x,pytorch,Python 3.x,Pytorch,我对以下代码片段有一些疑问: >>> 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.a
>>> 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.为什么这个代码示例可以工作,尽管当它被指定为apply()时,init_weights()中没有添加参数或括号?
2.当函数init_weights(m)作为函数apply()的参数(不带括号和m)给出时,它的参数m从何而来?我们在上述文档中找到了您的问题的答案: 将
fn
递归应用于每个子模块(由返回)
还有我自己。典型用途包括初始化模型的参数
(另见)
- 在调用
之前,不会调用给定的函数apply
,这正是因为没有括号,而是将对init_weights
的引用提供给init_weights
,并且只从apply
内部调用apply
init_weights
- 它通过
中的每个调用获取其参数,并且,正如文档所述,由于方法调用apply
,它被调用来迭代(在本例中)net.apply(…)
的每个子模块以及net
本身net