使用 Pytorch 提取自动编码器隐藏层的特征
Extracting features of the hidden layer of an autoencoder using Pytorch
我正在跟随 this tutorial 训练自动编码器。
培训进行得很顺利。接下来,我有兴趣从隐藏层(编码器和解码器之间)提取特征。
我应该怎么做?
最干净、最直接的方法是添加创建部分输出的方法——这甚至可以在经过训练的模型上事后完成。
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 即可查询模型的编码器隐藏状态。
如果您不想向基 class 添加任何方法(我不明白为什么),您也可以编写一个外部函数:
def get_encoder_state(model: AE, features: Tensor) -> Tensor:
return torch.relu(model.encoder_output_layer(torch.relu(model.encoder_hidden_layer(features))))
我正在跟随 this tutorial 训练自动编码器。
培训进行得很顺利。接下来,我有兴趣从隐藏层(编码器和解码器之间)提取特征。
我应该怎么做?
最干净、最直接的方法是添加创建部分输出的方法——这甚至可以在经过训练的模型上事后完成。
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 即可查询模型的编码器隐藏状态。
如果您不想向基 class 添加任何方法(我不明白为什么),您也可以编写一个外部函数:
def get_encoder_state(model: AE, features: Tensor) -> Tensor:
return torch.relu(model.encoder_output_layer(torch.relu(model.encoder_hidden_layer(features))))