【问题标题】:Extracting features of the hidden layer of an autoencoder using Pytorch使用 Pytorch 提取自编码器隐藏层的特征
【发布时间】:2021-06-01 18:42:03
【问题描述】:

我正在关注this tutorial 来训练自动编码器。

培训进展顺利。接下来,我有兴趣从隐藏层(编码器和解码器之间)提取特征。

我该怎么做?

【问题讨论】:

    标签: python pytorch feature-extraction autoencoder encoder-decoder


    【解决方案1】:

    最简洁和最直接的方法是添加用于创建部分输出的方法 - 这甚至可以在经过训练的模型上完成。

    from torch import Tensor
    
    class AE(nn.Module):
        def __init__(self, **kwargs):
            ...
    
        def encode(self, features: Tensor) -> Tensor:
            h = torch.relu(self.encoder_hidden_layer(features))
            return torch.relu(self.encoder_output_layer(h))
    
        def decode(self, encoded: Tensor) -> Tensor:
            h = torch.relu(self.decoder_hidden_layer(encoded))
            return torch.relu(self.decoder_output_layer(h))
    
        def forward(self, features: Tensor) -> Tensor:
            encoded = self.encode(features)
            return self.decode(encoded)
    

    您现在可以通过简单地使用相应的输入张量调用 encode 来查询模型的编码器隐藏状态。

    如果您不想向基类添加任何方法(我不明白为什么),您也可以编写一个外部函数:

    def get_encoder_state(model: AE, features: Tensor) -> Tensor:
       return torch.relu(model.encoder_output_layer(torch.relu(model.encoder_hidden_layer(features))))
    
    

    【讨论】:

    • 非常感谢。因此,在类中加入这个函数是否正确: def encode(self, features): activation = self.encoder_hidden_​​layer(features) activation = torch.relu(activation) code = self.encoder_output_layer(activation) code = torch.relu (代码)返回代码然后,在那个中等的教程中,写到 output = model(batch_features) 训练之后,我怎样才能调用我的函数和训练好的模型来提取特征?这是正确的:hidden_​​features = model.encode(my_input)
    • outputs = model(batch_features) 保持原样(它仍然为您提供重构的输入)。对于隐藏的功能,hidden_features = model.encode(input) 应该可以工作!
    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2019-06-29
    • 2020-03-12
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多