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'])

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作為輸出。

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 文件。
然而,另一個問題仍然存在,即使使用基礎模型的單層并添加編譯器仍然說的密集層
設備內存不足,無法運行模型。
但這是一個不同的問題,沒有直接在這個問題中提出。
添加回答
舉報