[英]Im getting ValueError when trying to load my own weights for a transfer learning task
嗨,我正在嘗試在 Keras 中進行遷移學習,並且我正在嘗試將權重加載到一個新的 model 中,我已經通過不同的任務進行了自我訓練。
我已經從另一項任務中訓練了自己的一組重量。 然而,這另一個任務是一個二元分類問題,而我的新問題是一個多標簽分類問題。
我得到了我的第一組權重:
n_classes = 1
epochs = 100
batch_size = 32
input_shape = (224, 224, 3)
base_model = MobileNetV2(input_shape=input_shape, weights= None, include_top=False)
x = GlobalAveragePooling2D()(base_model.output)
output = Dense(n_classes, activation='sigmoid')(x)
model = tf.keras.models.Model(inputs=[base_model.input], outputs=[output])
opt = optimizers.Adam(lr = 0.001)
model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])
...
...
history = model.fit(train_generator, epochs=epochs,
steps_per_epoch=step_size_train,verbose=1,
validation_data=valid_generator,
validation_steps=STEP_SIZE_VALID,
class_weight=class_weights,
)
model.save_weights("initial-weights.h5")
但是當我嘗試將這些重量加載到我的新 model 中時:
weights_path = 'initial-weights.h5'
n_classes = 14
epochs = 1000
batch_size = 32
input_shape = (224, 224, 3)
base_model = MobileNetV2(input_shape=input_shape, weights= None, include_top=False)
x = GlobalAveragePooling2D()(base_model.output)
output = Dense(n_classes, activation='sigmoid')(x)
model = tf.keras.models.Model(inputs=[base_model.input], outputs=[output])
opt = optimizers.Adam(lr = 0.001)
model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])
model.load_weights(weights_path)
我收到以下錯誤:
ValueError: Shapes (1280, 14) and (1280, 1) are incompatible
我理解基於錯誤,很可能是由於類數的不同,但是根據我對遷移學習的了解,即使類數不同,也有可能從不同的任務中遷移權重(例如 ImageNet 權重如何用於具有不同類別數量的任務)。
如何初始化我自己的一組自定義權重,這些權重是從具有不同類別數量的不同任務中訓練出來的?
我認為最好的方法是轉移除最后一層以外的所有層的權重(即特征提取部分)。 然后您可以凍結所有轉移的權重,並再次訓練 model,其中僅訓練最后一層(即分類層)的權重。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.