為了滿足程式某些功能,需要凍結網路中某一些層,下面為詳細**:
name_list =['up1','up2','up3','up4','up5'] #list中為需要凍結的網路層
model = eval(args.model_name)(n_class=n_class) #載入model
for name, value in model.named_parameters():
if name in name_list:
value.requires_grad = false
params = filter(lambda p: p.requires_grad, model.parameters())
optimizer = torch.optim.sgd(params, lr=lr_start, momentum=0.9, weight_decay=0.0005)
另外關於pytorch列印網路引數的內容:參考:
for name, param in vgg.named_parameters():
print(name, ' ', param.size())
列印的是模組名字.序號.權重名,注意此處不會列印relu,pool等不需要back的層
for i, para in enumerate(model.parameters()):
print(i,para)
列印網路引數的排序和具體值,這裡會列印relu和pool.如下:
直接列印param, 即 print(name,param), 列印結果:引數名字及具體值
在caffe中固定某些網路引數,只訓練某些層
實現的關鍵變數是 propagate down 含義 表示當前層的梯度是否向前傳播 比如有4個全連線層a b c d a.你希望c層的引數不會改變,c前面的ab層的引數也不會改變,這種情況也就是d層的梯度不往前反向傳播到d層的輸入blob 也就是c層的輸出blob 沒有得到梯度 你可以通過設定d層的...
pytorch 常用層(四)
torch.nn的核心資料結構是module,既可以表示神經網路中的某個層 layer 也可以表示乙個包含很多層的神經網路。import torch as t from torch import nnpytorch實現了神經網路中絕大多數的layer,這些layer都繼承於nn.module 主要關...
pytorch 使用預訓練層
將其他地方訓練好的網路,用到新的網路裡面 1.原先已經訓練好乙個網路 autoencoder fc 2.首先載入該網路,讀取其儲存的引數 3.設定乙個引數集 cnnpre autoencoder fc cnnpre.load state dict torch.load autoencoder fc....