如何在Pytorch网上执行微调

时间:2018-05-15 14:46:43

标签: python optimization machine-learning deep-learning pytorch

我在Pytorch中使用this实现SegNet,我想微调它。 我已经在线阅读了,我发现了this方法(基本上冻结了除网中最后一层之外的所有图层)。我的问题是SegNet有超过100层,我正在寻找一种更简单的方法,而不是编写100行代码。

你认为这可行吗?或者这完全是胡说八道?

import torch.optim as optim

model = SegNet()
for name, param in model.named_modules():
    if name != 'conv11d':    # the last layer should remain active
        param.requires_grad = False

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)


def train():
    ...

如何检查这是否按预期工作?

1 个答案:

答案 0 :(得分:0)

此过程称为微调,将requires_grad设置为False是一种很好的方法。来自pytorch docs

  

每个Tensor都有一个标志:requires_grad,允许从梯度计算中细粒度地排除子图,并可以提高效率。

...

  

如果对需要渐变的操作有单个输入,则其输出也需要渐变。相反,只有当所有输入都不需要梯度时,输出也不需要它。从不在子图中执行向后计算,其中所有张量都不需要渐变。

有关相关示例,请参阅this pytorch tutorial

检查此功能的一种简单方法是查看初始错误率。假设任务类似于网络最初训练的任务,它们应该比随机初始化的网络低得多。