簡體   English   中英

Keras 使用部分預訓練模型 (ResNet 18)

[英]Keras use part of pretrained models (ResNet 18)

我從這里使用預訓練的 ResNet18 我想使用從層 [4] 到 [-4] 的部分模型

我嘗試使用想要的圖層創建一個新模型,例如

res_net = ResNet18((224, 224, 3), weights='imagenet')

model = Model(res_net.layers[4].input, res_net.layers[-4].output)

但這個錯誤顯示

ValueError:圖形斷開連接:無法在層“bn_data”處獲取張量 Tensor("data_5:0", shape=(None, 224, 224, 3), dtype=float32) 的值。 訪問以下先前層沒有問題:[]

也試試這個

res_net = ResNet18((224, 224, 3), weights='imagenet', include_top=False)

x = Input(shape=(192, 640, 6))

conv1 = layers.Conv2D(64, kernel_size=7, strides=2, padding='same', input_shape=(192, 640, 6),name='conv1')(x)

l = res_net.layers[4](conv1) 
for i in range(5, len(res_net.layers[:-4])):
    l = res_net.layers[i](l)

model = Model(inputs=x,outputs=l)
model.summary()

但這個錯誤顯示

ValueError:應在輸入列表上調用合並層。

你可能想用

model = Model(res_net.layers[4].input, res_net.layers[0:-4].output)

同樣值得注意的是,不鼓勵上述做法。 從你的代碼來看,我猜你正試圖從 resnet18 的最后 4 層獲取輸出。 要做到這一點首先定義一個resnet50模型,然后創建,其輸入從resnet50模型的輸入抽頭和輸出從resnet50 14日被挖掘的新模式:

from tensorflow.keras.applications.ResNet50 import ResNet50
from tensorflow.keras.models import Model

base_model = ResNet50(weights='imagenet', include_top=True)
ResNet14 = Model(inputs = base_model.input,outputs = base_model.get_layer('conv2_block1_0_conv').output)

如果您不確定 resnet50 中所有層的名稱或 Keras 中的任何預建模型,您可以使用:

for layer in base_model.layers:
     print(layer.name)

要獲取第 14 層的名稱,您可以使用print(base_model.layers[13].name)

快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM