"值错误:优化不需要梯度的参数"不理解错误



作为在线python课程的一部分,我正在开发一个可以识别花朵的人工智能程序。在我第一次提交后,有人告诉我,我在加载模型后忘记了冻结参数,所以在反向搜索过程中不会修改参数。为了解决这个问题,在我加载模型的块中,我这样做了:


device = torch.device("cuda" if torch.cuda.is_available() else "cpu")model = models.vgg16(pretrained = True)    
model
for param in model.parameters():
param.requires_grad = False

然后,当运行我定义新前馈的块(下面的代码块(时,我得到错误"ValueError:优化一个不需要梯度的参数">

features = list(model.classifier.children())[:-1]
num_filters = model.classifier[len(features)].in_features
features.extend([
nn.Linear(25088, 2048),
nn.ReLU(True),
nn.Linear(2048, 512),
nn.ReLU(True),
nn.Linear(512, 102),
nn.LogSoftmax(dim=1)
])
model.classifier = nn.Sequential(*features)
criterion = nn.NLLLoss()
model = model.to('cuda')
optimizer = optim.Adam(model.classifier.parameters(), lr = 0.001)
model

如果有人能帮我,那我就太好了。

您尝试优化冻结的参数。您必须只将要优化的参数传递给优化器,其中requires_grad=True,而不是全部。

params_to_update = []
for name, param in model.named_parameters():
if param.requires_grad == True:
params_to_update.append(param)
optimizer = optim.Adam(params_to_update, lr = 0.001)

请参阅教程:https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html#finetuning-convnet

只有fc层的参数传递给优化器。

最新更新