pytorch固定某些層進行訓練

2021-09-24 02:49:20 字數 1038 閱讀 3824

為了滿足程式某些功能,需要凍結網路中某一些層,下面為詳細**:

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....