亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 keras 模型中刪除層以用作創建另一個模型的基線

如何從 keras 模型中刪除層以用作創建另一個模型的基線

慕少森 2023-04-18 10:46:55
我需要使用 Keras(keras.applications.VGG16)中的預訓練模型作為從它的第一層創建另一個模型(用于進行遷移學習)的基線。最終目標是凍結并導出模型,以便在帶有 AIY 視覺套件的樹莓派上部署。我嘗試了以下常見方法:model_base = keras.applications.VGG16(input_tensor=inputs)x = model_base.get_layer(backbone_layer).outputx = keras.layers.Flatten()(x)x = keras.layers.Dense(1)(x)model = keras.models.Model(inputs=inputs, outputs=x)我也在嘗試使用:model_base._layers.pop() 我調用 pop() n 次,其中“n”是我想要擺脫的最終層數。它似乎在這兩種情況下都有效,當我使用 new_model.summary() 它只顯示所需的 VGG16 模型的第一層加上為自定義添加的新層,但是當導出模型并為 tf-lite 編譯器編譯時回報:設備內存不足,無法運行模型這很奇怪,因為生成的模型(.pb 文件和層數)比其他可以正確導入的手動定義的模型更小,在分析 tensorboard 并將 .pb 文件導出為文本后,我發現原始模型正在也導出(所有圖層,甚至是未使用和使用 pop() 刪除的圖層),而不僅僅是新圖層(在 tensorboard 中看到有 2 個并行模型,右邊是所需的模型,但原始模型的原始層仍顯示在左側,原始模型的那部分也存在于導出的 .pb 文件中)我的問題是我怎樣才能明確地從 keras.applications.VGG16 模型中刪除未使用的層并只保留第一層 + 新的自定義層?使用 pop() 沒有用,也嘗試了 del 層(在 for 循環中)失敗?;蛘呶疫€有什么其他選擇可以通過僅保留第一層然后將其連接到其他一些自定義層來使用預訓練模型作為基線。
查看完整描述

3 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

最簡單的方法是在 VGG16 中設置 include_top=False, pooling=max。然后看下面的代碼:


x=backbone.layers[-1].output

predictions=Dense (len(classes), activation='softmax')(x)

model = Model(inputs=backbone.input, outputs=predictions)    

model.compile(Adamax(lr=lr_rate), loss='categorical_crossentropy', metrics=['accuracy'])



查看完整回答
反對 回復 2023-04-18
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

它實際上并不是刪除層,而是創建一個沒有它的新模型。


我真的不明白你想做什么,但物體檢測器通常會這樣做。


inputs = keras.layers.Input((None, None, 3), include_top=False)

backbone = keras.applications.VGG16(input_tensor=inputs)

x = backbone.get_layer('block1_conv2').output

x = keras.layers.Dense(50)(x)

model = keras.models.Model(inputs=inputs, outputs=x, name=backbone.name)

這將產生一個只有前兩層的模型,并添加一個新的Dense作為輸出。


查看完整回答
反對 回復 2023-04-18
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

使用 model.save() 保存所需的內容,清除 tf 會話,然后再次加載它可以解決問題(如@NatthaphonHongcharoen 所建議(在評論中):


model.save(model_file)

del model

keras.backend.clear_session()

model = keras.models.load_model(model_file)

現在,tensorflow 中導出的圖僅顯示所需的層,凍結圖生成一個較小的 .pb 文件。


然而,另一個問題仍然存在,即使使用基礎模型的單層并添加編譯器仍然說的密集層


設備內存不足,無法運行模型。


但這是一個不同的問題,沒有直接在這個問題中提出。


查看完整回答
反對 回復 2023-04-18
  • 3 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號