我已经训练了一个具有 3 个卷积层的自动编码器。现在我想使用编码器部分进行分类任务。因此,我加载模型并在一个新类中使用编码器部分,并添加一个具有十个神经元的线性层。问题是当我用主要权重训练网络时它不起作用,但是当我重置权重时它起作用。这是我加载和定义新网络的方式。
loadedM = AE3class(encoded_space_dim=2,NumFL1=int(bestParams['NumF1']),NumFL2=int(bestParams['NumF2']),
NumFL3=int(bestParams['NumF3']),latent=int(bestParams['latent_layer']))
PATH = "BestModel.pth"
loadedM.load_state_dict(torch.load(PATH))
class finetune(nn.Module):
def __init__(self):
super().__init__()
self.convlayer = (loadedM.encoder_cnn)
self.fc = (loadedM.encoder_lin[0:1])
self.flatten = nn.Flatten(start_dim=1)
self.out = nn.Linear(in_features=94,out_features=10)
def forward(self, x):
# Apply convolutions
x = self.convlayer(x)
# Flatten
x = self.flatten(x)
x = self.fc(x)
x = self.out(x)
return x
fineTunModel = finetune()
for layer in fineTunModel.children():
if hasattr(layer, 'reset_parameters'):
layer.reset_parameters()
这是主要自动编码器的架构。