我一直在尝试使用resnet作为我的主干来进行多类分类任务的迁移学习。
[在许多教程中都指出,明智的是尝试再次仅训练最后一层(通常是完全连接的层),同时冻结其他层。冻结将这样进行:
for param in model.parameters():
param.requires_grad = False
但是,我只是意识到我的所有图层实际上都未冻结,并且在检查代码时,我意识到自己做了错别字:
for param in model.parameters():
param.required_grad = False
以写required_grad
而不是requires_grad
的方式。
我似乎找不到有关required_grad
的信息-它是什么,也没有做什么。我发现的唯一一件事是它没有更改requires_grad
标志,并且有一个单独的required_grad
标志设置为False。
[谁能解释required_grad
的功能吗?我一直都没有“冻结”我的其他图层吗?
好,这真是愚蠢。
for param in model.parameters():
param.required_grad = False
在这种情况下,由于我的错字,创建了一个新的'required_grad'。例如,即使以下情况也不会调用错误:
for param in model.parameters():
param.what_in_the_world = False
并且模型的所有参数现在都具有what_in_the_world
属性。
我希望没有其他人因此而浪费时间。