原始代碼太過冗長,因此我將嘗試用一個(gè)簡化的例子來解釋這個(gè)問題。首先,導(dǎo)入我們需要的庫:import tensorflow as tffrom keras.applications.resnet50 import ResNet50from keras.models import Modelfrom keras.layers import Dense, Input然后加載預(yù)先訓(xùn)練的模型并打印出摘要。model = ResNet50(weights='imagenet')model.summary()(我剪切了summary()函數(shù)的輸出以節(jié)省一些空間。)現(xiàn)在,所有層參數(shù)都是可訓(xùn)練的。為了示例,我將一個(gè)可訓(xùn)練參數(shù)設(shè)置False為如下。model.get_layer('bn5c_branch2c').trainable = False目前,除bn5c_branch2c層外,所有其他層仍可訓(xùn)練。接下來,使用此原始模型創(chuàng)建一個(gè)新模型,但讓它成為串聯(lián)模型。in1 = Input(shape=(224, 224, 3), name="in1")in2 = Input(shape=(224, 224, 3), name="in2")out1 = model(in1)out2 = model(in2)new_model = Model(inputs=[in1, in2], outputs=[out1, out2])并再次打印摘要:new_model.summary()__________________________________________________________________________________________________Layer (type) Output Shape Param # Connected to Total params: 25,636,712Trainable params: 25,583,592Non-trainable params: 53,120__________________________________________________________________________________________________在這一點(diǎn)上,我已經(jīng)失去了查看哪些層可訓(xùn)練和不可訓(xùn)練的能力,因?yàn)樵糝esNet50模型的所有層現(xiàn)在都顯示為一個(gè)層。如果我運(yùn)行以下代碼,它將給我True:new_model.get_layer('resnet50').trainable # Returns True問題1)我確實(shí)在模型中將bn5c_branch2c層的可訓(xùn)練參數(shù)設(shè)置為False 。我可以假設(shè)即使在new_model中,bn5c_branch2c的可訓(xùn)練值仍然為False嗎?問題2)如果上述問題的答案為是(意味著new_model中bn5c_branch2c層的可訓(xùn)練參數(shù)值仍然為False)...如果我以后保存了此new_model的體系結(jié)構(gòu)和權(quán)重,然后再次加載它們以進(jìn)行進(jìn)一步訓(xùn)練這個(gè)new_model ...我可以相信bn5c_branch2c的可訓(xùn)練參數(shù)值將保持為False嗎?
1 回答

蠱毒傳說
TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
注意:您可以使用.layers[idx]屬性訪問模型的圖層,其中屬性idx是模型中圖層的索引(從零開始)。另外,如果您為圖層設(shè)置了名稱,則可以使用.get_layer(layer_name)方法訪問它們。
A1)是的,您可以通過以下方式確認(rèn)這一點(diǎn):
print(new_model.layers[2].get_layer('bn5c_branch2c').trainable) # output: False
另外,您可以通過查看模型摘要中不可訓(xùn)練參數(shù)的數(shù)量來確認(rèn)這一點(diǎn)。
A2)是的,您可以通過以下方式確認(rèn)這一點(diǎn):
# save it
new_model.save('my_new_model.hd5')
# load it again
new_model = load_model('my_new_model.hd5')
print(new_model.layers[2].get_layer('bn5c_branch2c').trainable) # output: False
添加回答
舉報(bào)
0/150
提交
取消