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?