MXNet使用技巧:单独设置网络中每层的学习率

本文介绍了在MXNet中如何在迁移学习时单独设置预训练模型各层的学习率。通过使用`net.collect_params('re').setattr('lr_mult', ratio)`方法,利用正则表达式匹配层名,可以针对性地调整最后全连接层等特定层的学习率,实现更精细的调参策略。" 121530351,11548792,AH8412双节锂电池充电管理控制器详解,"['嵌入式硬件', '单片机', '充电芯片']
摘要由CSDN通过智能技术生成

迁移学习 (Finetune) 中我们经常需要固定pretrained层的学习率,或者把其学习率设置比后面的网络小,这就需要我们对不同的层设置不同的学习率,这里总结一下实现设置每层学习率的方法。

使用net.collect_params(‘re’).setattr(‘lr_mult’,ratio)方法

  net.collect_params()将返回一个ParamterDict类型的变量,其中包含了网络中所有参数。其函数原型如下:

def collect_params(self,select=None)

model.collect_params('conv1_weight|conv1_bias|fc_weight|fc_bias')
model.collect_params('.*weight|.*bias')

  其中select参数可以为一个正则表达式,从而collect_params只会选择被该正则表达式匹配上的参数。我们首先把需要单独设置学习率的参数都用正则表达式匹配出来。比如说下面的ResNet50,其所有参数如下(中间省略了一些层):

print(net.collect_params())

resnet50v1 (
  Parameter resnet50v1batchnorm0_gamma (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1batchnorm0_beta (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1batchnorm0_running_mean (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1batchnorm0_running_var (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1conv0_weight (shape=(64, 0, 5, 5), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1layer1_batchnorm0_gamma (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1layer1_batchnorm0_beta (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1layer1_batchnorm0_running_mean (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1layer1_batchnorm0_running_var (shape=(0,), dtype=<class 'numpy.float32'>)
  Parameter resnet50v1layer1_conv0_weight (shape=(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值