如果您想要使用與預先訓練的模型不同的圖像分辨率,則應僅使用卷積塊,並針對新尺寸使用一組完全連接的塊。使用像Keras這樣的更高級別的庫會使它更容易。以下是Keras中如何做到這一點的一個例子。
import keras
from keras.layers import Flatten,Dense,GlobalAveragePooling2D
from keras.models import Model
from keras.applications.inception_v3 import InceptionV3
base_model = InceptionV3(include_top=False,input_shape=(600,600,3),weights='imagenet')
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024,activation='relu')(x)
#Add as many dense layers/Fully Connected layers required
pred = Dense(10,activation='softmax')(x)
model = Model(base_model.input,pred)
for l in model.layers[:-3]:
l.trainable=False
input_top = False
只會給你卷積塊。您可以使用input_shape=(600,600,3)
來設置所需的形狀。你可以在模型中添加一些密集塊/完全連接的塊/層。最後一層應該包含所需數量的類別.10代表類的數量。通過這種方法,你可以使用所有與卷積層相關的權重的預訓練模型,並只訓練最後的密集層。
你願意詳細說明嗎? 我想如果我重新使用初始模型的卷積塊,我仍然不得不修改所有這些來適應我的新尺寸no? 你是什麼意思,「有一套完全連接的塊相對於新的尺寸」? 我看了一下Keras,它似乎提供了比tensorflow更抽象一些,但我不確定這會對我的問題有所幫助 – Pdv
用一個示例修改了答案。希望能幫助到你。 –