使用 Pytorch 从自动编码器中提取隐藏特征

Extracting hidden features from Autoencoders using Pytorch

按照 post 中的教程,我正在尝试训练自动编码器并从其隐藏层中提取特征。

所以这是我的问题:

  1. 在自动编码器class中,有一个“前向”函数。但是,我在代码中的任何地方都看不到调用此函数的地方。那么它是如何训练的呢?

  2. 我上面的问题是因为我觉得如果我想提取特征,我应该在自动编码器中添加另一个函数(f"orward_hidden") class:

     def forward(self, features):
         #print("in forward")
         #print(type(features))
         activation = self.encoder_hidden_layer(features)
         activation = torch.relu(activation)
         code = self.encoder_output_layer(activation)
         code = torch.relu(code)
         activation = self.decoder_hidden_layer(code)
         activation = torch.relu(activation)
         activation = self.decoder_output_layer(activation)
         reconstructed = torch.relu(activation)
         return reconstructed
    
     def forward_hidden(self, features):
         activation = self.encoder_hidden_layer(features)
         activation = torch.relu(activation)
         code = self.encoder_output_layer(activation)
         code = torch.relu(code)
         return code
    

然后,经过训练,也就是在主代码的这一行之后:

print("AE, epoch : {}/{}, loss = {:.6f}".format(epoch + 1, epochs_AE, loss))

我可以输入以下代码从隐藏层检索特征:

hidden_features = model_AE.forward_hidden(my_input)

这种方式正确吗?尽管如此,我还是想知道“前向”功能是如何用于训练的。因为我在被调用的代码中的任何地方都看不到它。

forward 是模型的本质,实际上定义了模型的功能。

在训练过程中用model(input)隐式调用。

如果您询问如何在 运行 模型之后提取中间特征,您可以像 here 中描述的那样注册一个 forward-hook,这将为您“捕捉”价值。