问题:
在深度学习的模型的训练的过程中,经常会遇到需要对不同的模型参数设置不同的学习策略,比如使用不同的学习率,设置权重衰减等,在pytorch框架中的设置相对来说是比较简单的。
pytorch中分别优化设置:
#coding:utf-8
import torch
from torchvision import models
#模型初始化
model = models.resnet50(pretrained=True)
#根据需要,进行参数分组(权重衰减设置)
pg0, pg1, pg2 = [], [], [] # optimizer parameter groups
for k, v in model.named_modules():
if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter):
pg2.append(v.bias) # biases
if isinstance(v, nn.BatchNorm2d):
pg0.append(v.weight) # no decay
elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter):
pg1.append(v.weight) # apply decay
#优化器设置
optimizer = optim.SGD(pg0, lr=0.001, momentum=0.0005, nesterov=True)
optimizer.add_param_group({'params': pg1, 'weight_decay': hyp['weight_decay']})
optimizer.add_param_group({'params': pg2}) # add pg2 (biases)
pytorch中冻结某些层设置:
from torchvision import models
model = models.resnet18()
# 冻结layer4以前的所有层,只训练layer4与全连接层(根据类别需自定义)
no_freeze = ['layer4','fc'] # parameter names to freeze (full or partial)
for k, v in model.named_parameters():
v.requires_grad = True # train all layers
if not any(x in k for x in no_freeze):
print('freezing %s' % k)
v.requires_grad = False
参考:yolov5源码库中的train.py文件中