Home > Enterprise >  optimizer got an empty parameter list
optimizer got an empty parameter list

Time:08-11

If I use optim.SGD(model_conv.fc.parameters() I'm getting an error:

optimizer got an empty parameter list

This error is, when model_conv.fc is nn.Hardtanh(...) (also when I try to use ReLu). But with nn.Linear it works fine.

What could be the reason?

model_conv.fc = nn.Hardtanh(min_val=0.0, max_val=1.0) #not ok --> optimizer got an empy parameter list
#model_conv.fc = nn.ReLU() #also Not OK
# num_ftrs = model_conv.fc.in_features
# model_conv.fc = nn.Linear(num_ftrs, 1) #it works fine


model_conv = model_conv.to(config.device())

optimizer_conv = optim.SGD(model_conv.fc.parameters(), lr=config.learning_rate, momentum=config.momentum) #error is here

CodePudding user response:

Hardtanh and ReLU are parameter-free layers but Linear has parameters.

CodePudding user response:

Activation functions are used to add non-linearity to your model which is parameter-free, so you should pass a nn.Linear as a fully-connected (FC) layer

num_ftrs = model_conv.fc.in_features
model_conv.fc = nn.Sequential( list_of_FC_layers )

e.g

model_conv.fc = nn.Sequential( nn.Linear(in_features, hidden_neurons),
                               nn.Linear(hidden_neurons, out_channels) )

or

model_conv.fc = nn.Linear( in_features, out_channels)

out_channels in case of binary-classification task is 1 and in case of multi-class classification is num_classes

NOTE.1: for multi-class classification, Do Not use the softmax layer as it is done in CrossEntropyLoss

NOTE.2 : You can use Sigmoid activation for binary classification use

  • Related