国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python PyTorch參數(shù)初始化和Finetune

2020-01-04 15:52:18
字體:
供稿:網(wǎng)友

前言

這篇文章算是論壇PyTorch Forums關(guān)于參數(shù)初始化和finetune的總結(jié),也是我在寫代碼中用的算是“最佳實踐”吧。最后希望大家沒事多逛逛論壇,有很多高質(zhì)量的回答。

參數(shù)初始化

參數(shù)的初始化其實就是對參數(shù)賦值。而我們需要學(xué)習(xí)的參數(shù)其實都是Variable,它其實是對Tensor的封裝,同時提供了data,grad等借口,這就意味著我們可以直接對這些參數(shù)進行操作賦值了。這就是PyTorch簡潔高效所在。

pytorch,參數(shù)初始化,python

所以我們可以進行如下操作進行初始化,當(dāng)然其實有其他的方法,但是這種方法是PyTorch作者所推崇的:

def weight_init(m):# 使用isinstance來判斷m屬于什么類型  if isinstance(m, nn.Conv2d):    n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels    m.weight.data.normal_(0, math.sqrt(2. / n))  elif isinstance(m, nn.BatchNorm2d):# m中的weight,bias其實都是Variable,為了能學(xué)習(xí)參數(shù)以及后向傳播    m.weight.data.fill_(1)    m.bias.data.zero_()

Finetune

往往在加載了預(yù)訓(xùn)練模型的參數(shù)之后,我們需要finetune模型,可以使用不同的方式finetune。

局部微調(diào)

有時候我們加載了訓(xùn)練模型后,只想調(diào)節(jié)最后的幾層,其他層不訓(xùn)練。其實不訓(xùn)練也就意味著不進行梯度計算,PyTorch中提供的requires_grad使得對訓(xùn)練的控制變得非常簡單。

model = torchvision.models.resnet18(pretrained=True)for param in model.parameters():  param.requires_grad = False# 替換最后的全連接層, 改為訓(xùn)練100類# 新構(gòu)造的模塊的參數(shù)默認requires_grad為Truemodel.fc = nn.Linear(512, 100)# 只優(yōu)化最后的分類層optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0.9)

全局微調(diào)

有時候我們需要對全局都進行finetune,只不過我們希望改換過的層和其他層的學(xué)習(xí)速率不一樣,這時候我們可以把其他層和新層在optimizer中單獨賦予不同的學(xué)習(xí)速率。比如:

ignored_params = list(map(id, model.fc.parameters()))base_params = filter(lambda p: id(p) not in ignored_params,           model.parameters())optimizer = torch.optim.SGD([      {'params': base_params},      {'params': model.fc.parameters(), 'lr': 1e-3}      ], lr=1e-2, momentum=0.9)

其中base_params使用1e-3來訓(xùn)練,model.fc.parameters使用1e-2來訓(xùn)練,momentum是二者共有的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 潜山县| 兰溪市| 赤壁市| 金平| 苗栗市| 龙岩市| 得荣县| 秭归县| 三江| 溧阳市| 印江| 瓮安县| 双城市| 新郑市| 尼木县| 临泽县| 娄底市| 察雅县| 西乌| 故城县| 柘荣县| 延川县| 长武县| 始兴县| 湖北省| 望江县| 陕西省| 寿光市| 温州市| 靖宇县| 华池县| 新余市| 洛川县| 平武县| 达尔| 建始县| 马公市| 崇义县| 泸水县| 洞头县| 聊城市|