pytorch训练网络冻结某些层
引言:首先我們應該很清楚地知道凍結網絡中的某些層有什么作用?如何進行相關的凍結設置?代碼何如呢?
話不多說說,首先我們探討第一個問題:
1.凍結網絡的某些層有什么作用?
? ? ? ? 這個問題顧名思義就是凍結網絡中的某些層,使網絡在訓練過程中,這些層都在不參與的狀態,即網絡中的某些參數設置就不會更改(已有的訓練模型,類似于基于遷移學習的過程),如此大大加快了網絡的訓練過程,減少了訓練的時間。此方法多用于基于遷移學習的模型訓練與同時分別訓練不同的網絡。
2.凍結網絡中的某些層應該如何設置?
????????下面給出的是關于YOLO網絡在凍結層的設置:
代碼:
# Freezefreeze = ['', ] # parameter names to freeze (full or partial)if any(freeze):for k, v in model.named_parameters():if any(x in k for x in freeze):print('freezing %s' % k)v.requires_grad = False????????最為明顯的設置是最后一句,即? ?v.requires_grad = False? ?此語句就是凍結的核心,將梯度設置為False,因為在網絡中,訓練的基本思想就是利用梯度下降法尋找全局最優解,而此時將梯度關閉,就等價于梯度為0,如此就無法訓練該層,所以在訓練網絡時只能忽略該層,并且保證該層的參數設置不改變。
3.代碼何如?
? ? ? ? 注意到凍結網絡中的某些層,就在上述代碼中的?freeze = ['', ] ?# parameter names to freeze (full or partial),添加某些層,例如最后一層卷積層,就添加? freeze = ['last_conv', ] ,你學廢了嗎?
(補)4.優化器設置
? ? ? ? 上述只是對網絡中的某層進行凍結(在下不才,理解為使梯度為0),還有重要的是如何使優化器知道呢?
? ? ? ? 就要重新設定網絡了,提示優化器在網絡中,這些層已經被我凍住了,你走吧!不需要你優化了,于是優化器一看,果然如此,于是繞道而行。下面是相關的優化器設置代碼,如下:
代碼:
pg0, pg1, pg2 = [], [], [] # optimizer parameter groupsfor k, v in model.named_parameters():v.requires_grad = Trueif '.bias' in k:pg2.append(v) # biaseselif '.weight' in k and '.bn' not in k:pg1.append(v) # apply weight decayelse:pg0.append(v) # all elseif opt.adam:optimizer = optim.Adam(pg0, lr=hyp['lr0'], betas=(hyp['momentum'], 0.999)) # adjust beta1 to momentumelse:optimizer = optim.SGD(pg0, lr=hyp['lr0'], momentum=hyp['momentum'], nesterov=True)optimizer.add_param_group({'params': pg1, 'weight_decay': hyp['weight_decay']}) # add pg1 with weight_decayoptimizer.add_param_group({'params': pg2}) # add pg2 (biases)logger.info('Optimizer groups: %g .bias, %g conv.weight, %g other' % (len(pg2), len(pg1), len(pg0)))del pg0, pg1, pg2????????優化器看一眼就知道,記住了哪些網絡已不需要優化了,采用分解記憶,在偏置、權重、批量歸一化中記憶,采用Adam或者SGD優化器。最后把中間的一些變量刪除,防止占用內存空間。
5.結束
GAME OVER
如果小伙伴夢有疑問歡迎在評論區留言哦!!!
如果感覺不錯的話!你懂得(O(∩_∩)O哈哈~)
歡迎和小伙伴夢一起學習+探討問題,共同努力,加油!!!
歡迎轉載,記得通知我哦!!!
網址是:
https://blog.csdn.net/m0_56654441/article/details/120610487總結
以上是生活随笔為你收集整理的pytorch训练网络冻结某些层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何学习C4D?非常详细的C4D学习攻略
- 下一篇: tkinter天气查询可视化