I’m still fairly new to PyTorch, and grappling with this problem for my own understanding: I am trying to insert a new untrained classifier block at the end of densenet 121, replacing the existing one and defining it using nn.Module instead of nn.Sequential.
It works fine if I do something along these lines:
classifier = nn.Sequential( nn.Linear(1024, 500), nn.ReLU(), nn.Linear(500, 1), nn.Sigmoid())
I’d like to try and define a nn.Module from scratch instead. In this case I was trying something like:
class New_Classifier(nn.Module): def __init__(self): super(New_Classifier, self).__init__() self.fc1 = nn.Linear(feature_length,hidden_1) self.fc2 = nn.Linear(hidden_1, hidden_2) self.fc3 = nn.Linear(hidden_2, 1) # should output the final score # dropout layer self.dropout = nn.Dropout(0.2) def forward(self, x): x = F.relu(self.fc1(x)) # fully connected layer 1 x = self.dropout(x) x = F.relu(self.fc2(x)) # fully connected layer 2 x = torch.sigmoid(self.fc3(x)) # Return a value between 0 and 1 return x
model.classifier = New_Classifier
I realise this isn’t very elegant or necessary, I just wanted to understand how one would go about this if the new classifier wasn’t nicely definable with nn.Sequential or similar. I get the following error:
TypeError: cannot assign ‘main.New_Classifier’ as child module ‘classifier’ (torch.nn.Module or None expected)
Any suggestions what caused this error? I suspect the ‘child module’ is a clue. Or if I’m trying to do something that just can’t be done?