Skip to content
Advertisement

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)

Advertisement

Answer

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)
9 People found this is helpful
Advertisement