pythonoptimizationpytorchvalueerrorsgd

using ModuleList, still getting ValueError: optimizer got an empty parameter list


With Pytorch I am attempting to use ModuleList to ensure model parameters are detected, and can be optimized. When calling the SGD optimizer I get the following error:

ValueError: optimizer got an empty parameter list

Can you please review the code below and advise?

class LR(nn.Module):
    def ___init___(self):
        super(LR, self).___init___()
        self.linear = nn.ModuleList()
        self.linear.append(nn.Linear(in_features=28*28, out_features=128, bias=True))
    
    def forward(self, x):
        y_p = torch.sigmoid(self.linear(x))
        return y_p

LR_model = LR()
optimizer = torch.optim.SGD(params = LR_model.parameters(), lr=learn_rate)

Solution

  • This seems to be a copy-paste issue: your __init__ has 3 underscores instead of 2, both at __init__(self) and super(LR, self).__init__(). Thus the init itself failed. Delete the extra underscores and try again or try the below code:

    class LR(nn.Module):
        def __init__(self):
            super(LR, self).__init__()
            self.linear = nn.ModuleList()
            self.linear.append(nn.Linear(in_features=28*28,
                                         out_features=128, 
                                         bias=True))
    
        def forward(self, x):
            y_p = torch.sigmoid(self.linear(x))
            return y_p
    
        LR_model = LR()
        optimizer = torch.optim.SGD(params = list(LR_model.parameters()), 
                                    lr=learn_rate)