在大多数PyTorch示例中,我看到的是
然而,在Annotated Transformer Attention Is All You Need Transformer的实现中,他们使用
编辑: 非常抱歉没有明确我所说的层是什么。我所指的代码结构如下:
正如您所看到的,在
out = model(input)
而不是out = model.forward(input)
。我理解后者不处理任何钩子,并且第一种选项通常更受欢迎。然而,在Annotated Transformer Attention Is All You Need Transformer的实现中,他们使用
model.forward()
来获取整个模型的输出,但是模型中的所有层都是使用layer(x)
而不是layer.forward(x)
调用的。我认为这个显式使用.forward()
是有意义的,但是无法弄清楚原因。编辑: 非常抱歉没有明确我所说的层是什么。我所指的代码结构如下:
class model(nn.Module):
def __init__(self, layer1, layer2, layer3):
super(model, self).__init__()
self.layer1 = layer1
self.layer2 = layer2
self.layer3 = layer3
def forward(self, x):
return self.layer2(self.layer1(x))
class layer1(nn.Module):
def __init__(self, inputs):
super(layer3, self).__init__()
## set stuff here
def forward(self, x):
## do stuff to x
return x
class layer2(nn.Module):
def __init__(self, layer, N):
super(layer2, self).__init__()
## set stuff here
def forward(self, x):
## do more stuff to x
return x
正如您所看到的,在
model
中,通过layer(x)
将x传递到所有层,但在这个特定的例子中,输出是通过out = model.forward(input)
计算的。