keras load_model не может распознать новый AU C metri c tf.keras.metrics.AU C () - PullRequest
2 голосов
/ 29 мая 2020

Я использую новую версию тензорного потока, и у нее есть au c metri c, определенный как tf.keras.metrics.AU C (). Модель компилируется и работает нормально, но когда я загружаю модель, она не может распознать функцию au c metri c. Я добавил необходимую функцию импорта. Коды приведены ниже:

    import keras
    import tensorflow as tf
    from tensorflow.keras import backend as K
    from keras.optimizers import SGD, Adam
    from keras.models import Model, load_model
    from kerao.callbacks import Plotter
    from keras.callbacks import Callback, ModelCheckpoint

    optimizer = SGD(lr=1e-3, decay=1e-4, momentum=0.9, nesterov=True)
    model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=[tf.keras.metrics.AUC()])

    out_path = "../model_test.h5"
    checkpoint = ModelCheckpoint(out_path, monitor='val_loss', save_best_only=True, period=1, verbose=1)

    model.fit_generator(generatortrain, steps_per_epoch= 100, epochs= 30, validation_data= generatortest, validation_steps=len(generatortest), initial_epoch=0, callbacks=[Plotter(), checkpoint], workers=7, max_queue_size=20, class_weight= class_weight)

    model_new= load_model('../model_test.h5', custom_objects= {'AUC': tf.keras.metrics.AUC()})

> ValueError: Unknown metric function:auc

I have also tried following way:


    def auc(y_true, y_pred):

        return tf.keras.metrics.AUC()

    optimizer = SGD(lr=1e-3, decay=1e-4, momentum=0.9, nesterov=True)
    model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=[auc, f1])


This gives me following error:

Failed to convert object of type <class 'tensorflow.python.keras.metrics.AUC'> to Tensor. Contents: <tensorflow.python.keras.metrics.AUC object at 0x7fd6f0ea7350>. Consider casting elements to a supported type.





...