keras VGG 16迁移学习-未知指标函数:f1_score错误[重复]

rdrgkggo  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(173)

此问题已在此处有答案

Loading model with custom loss + keras(5个答案)
4天前关闭。
我有一个迁移学习模型,我使用了VGG 16,然后添加了一些dense,dropout和batch_normalization层。我训练了模型,并使用model.save('Study3_v1.h5')命令将其保存为Study3_v1.h5
然而,当我尝试使用model = tf.keras.models.load_model('Study3_v1.h5')命令加载它时,它给了我下面的错误:
ValueError: Unknown metric function: f1_score. Please ensure this object is passed to the自定义对象argument. See https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object for details.
我认为导致错误的是我在编译和训练模型之前使用的回调或指标,它们的代码如下:

def f1_score(y_true, y_pred): #taken from old keras source code
    true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
    possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
    predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
    precision = true_positives / (predicted_positives + K.epsilon())
    recall = true_positives / (possible_positives + K.epsilon())
    f1_val = 2*(precision*recall)/(precision+recall+K.epsilon())
    return f1_val
METRICS = [
      tf.keras.metrics.BinaryAccuracy(name='accuracy'),
      tf.keras.metrics.Precision(name='precision'),
      tf.keras.metrics.Recall(name='recall'),  
      tf.keras.metrics.AUC(name='auc'),
        f1_score,
]
lrd = ReduceLROnPlateau(monitor = 'val_loss',patience = 20,verbose = 1,factor = 0.50, min_lr = 1e-10)

mcp = ModelCheckpoint('model.h5')

es = EarlyStopping(verbose=1, patience=20)

编译模型:

model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=METRICS)

训练模型:

history=model.fit(train_dataset,validation_data=valid_dataset,epochs = 5,verbose = 1,callbacks=[lrd,mcp,es])

是什么导致了这个错误?我需要向load_model函数添加哪些自定义对象
先谢谢你了!

webghufk

webghufk1#

因为您使用了自定义指标。所以现在您需要执行以下操作:

model = tf.keras.models.load_model('Study3_v1.h5',custom_objects={"f1_score":f1_score})

每当你有一个自定义对象,如自定义模型,层,指标...你需要这样做,如果你把你的模型保存在h5。

相关问题