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)