使用 Pytorch 从自动编码器中提取隐藏特征
Extracting hidden features from Autoencoders using Pytorch
按照 post 中的教程,我正在尝试训练自动编码器并从其隐藏层中提取特征。
所以这是我的问题:
在自动编码器class中,有一个“前向”函数。但是,我在代码中的任何地方都看不到调用此函数的地方。那么它是如何训练的呢?
我上面的问题是因为我觉得如果我想提取特征,我应该在自动编码器中添加另一个函数(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,这将为您“捕捉”价值。
按照 post 中的教程,我正在尝试训练自动编码器并从其隐藏层中提取特征。
所以这是我的问题:
在自动编码器class中,有一个“前向”函数。但是,我在代码中的任何地方都看不到调用此函数的地方。那么它是如何训练的呢?
我上面的问题是因为我觉得如果我想提取特征,我应该在自动编码器中添加另一个函数(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,这将为您“捕捉”价值。