我一直在尝试使用 resnet 作为 Backbone 对多类分类任务进行迁移学习。
在许多教程中,有人指出,明智的做法是再次尝试仅训练最后一层(通常是完全连接的层),同时卡住其他层。卡住将按如下方式完成:
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
属性。
我希望没有人因此而浪费时间。
关于python - required_grad 在 PyTorch 中做什么? (不要求_grad),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59260854/