簡體   English   中英

嘗試為遷移學習任務加載我自己的權重時出現 ValueError

[英]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.

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