keras load_model cannot recognize new AUC metric tf.keras.metrics.AUC()

Viewed 889

I am using new tensorflow version and it has auc metric defined as tf.keras.metrics.AUC(). The model compiles and runs fine but when I load the model it cannot recognize auc metric function. I have added required import function. The codes are given below:

    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.





1 Answers
from keras.metrics import AUC

...

model.compile(loss='categorical_crossentropy', 
              optimizer=optimizer, 
              metrics=[AUC(name='auc')])
Related