mxnet:finetune 几层写法

深度学习中,常常会用到finetuning。

所谓的finetune也就是微调,在已有的训练好的模型基础上,将该模型参数部分转移到新模型上或者全部作为新模型的初始化方式。这样带来好处就是不同数据源不同任务之间的快速训练达到想要的效果。

这种学习方式也就是常说的迁移学习,当然,迁移学习的知识点很多,还是需要更多的去仔细研究和学习的。

这几天尝试了一下微调,发现mxnet里面的这部分还是可以记录一下的,以便以后用到。

(1)主要用到的api函数:

set_lr_mult(dict):输入时个dict。

该函数的目的是设置一个layer和其对应的lr的一个dict,以便优化器的调用。当我们finetune的时候,有时候需要固化某些层(基本是前几层,保持共性,微调后几层,找特性)。所以对于一个加载进来的模型,每一层对应的学习率是完全不一样的,这个时候就需要这个函数了。

比如说:

一个三层的网络,分别为conv_0,bn_0,fc_1。

如果希望不动前两层的参数,只调节最后一层的参数,那么对应的lr就应该是0,0,lr。写成dict的形式就是{'conv_0':0,'bn_0':0,‘fc_1’:lr}。

(2)步骤:

#step 1:set an optimizer
optimizer=mx.optimizer.Optimizer.create_optimizer('sgd',learning_rate=0.01)

#step 2:获取固定的层名

finetune_layer={'name1','name2'}#just an example

#step 3:设置不同的学习lv
finetune_lr=dict({k:0 for k in finetune_layers})

#step 4:optimizer
optimizer.set_lr_mult(finetune_lr)

-----------------------------------------------update-----------------------------------

需要设置rescale——grad,详情见下一篇博文。

修改代码:

#step 1:set an optimizer
optimizer=mx.optimizer.Optimizer.create_optimizer('sgd',learning_rate=0.01,rescale_grad=1/batch_size)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值