Closed dsp6414 closed 3 years ago
models/backbone/resnet.py
感觉这位置应该为True,是我理解错了吗? 还有如果目标类别和预训练模型不一样可以加载预训练模型吗?
具体那个位置?resnet在配置文件里有定义。冻结那几几层的残差块
def _freeze_stages(self): if self.frozen_stages >= 0: self.norm1.eval() for m in [self.conv1, self.norm1]: for param in m.parameters(): param.requires_grad = False #我觉得这里是不是应该为True
for i in range(1, self.frozen_stages + 1):
m = getattr(self, 'layer{}'.format(i))
m.eval()
for param in m.parameters():
param.requires_grad = False
def _freeze_stages(self): if self.frozen_stages >= 0: self.norm1.eval() for m in [self.conv1, self.norm1]: for param in m.parameters(): param.requires_grad = False #我觉得这里是不是应该为True
for i in range(1, self.frozen_stages + 1): m = getattr(self, 'layer{}'.format(i)) m.eval() for param in m.parameters(): param.requires_grad = False
这部分代码没有问题,frozen_stages 默认值为-1, param.requires_grad = False,在反向梯度更新的时候叶子节点不更新权重,网络层冻结。 param.requires_grad = True是默认值,默认所有的叶子节点都更新梯度。
感觉这位置应该为True,是我理解错了吗? 还有如果目标类别和预训练模型不一样可以加载预训练模型吗?