加载先前保存的模型时遇到问题。
这是我的保存:
def build_rnn_lstm_model(tokenizer, layers):
model = tf.keras.Sequential([
tf.keras.layers.Embedding(len(tokenizer.word_index) + 1, layers,input_length=843),
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(layers, kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01), bias_regularizer=l2(0.01))),
tf.keras.layers.Dense(layers, activation='relu', kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01)),
tf.keras.layers.Dense(layers/2, activation='relu', kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01)),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy',f1,precision, recall])
print("Layers: ", len(model.layers))
return model
model_path = str(Path(__file__).parents[2]) + os.path.sep + 'model'
data_train_sequence, data_test_sequence, labels_train, labels_test, tokenizer = get_training_test_data_local()
model = build_rnn_lstm_model(tokenizer, 32)
model.fit(data_train_sequence, labels_train, epochs=num_epochs, validation_data=(data_test_sequence, labels_test))
model.save(model_path + os.path.sep + 'auditor_model', save_format='tf')
此后,我看到auditor_model
被保存在model
目录中。
现在我想用以下方式加载该模型:
model = tf.keras.models.load_model(model_path + os.path.sep + 'auditor_model')
但是我得到了
ValueError:无法恢复_tf_keras_metric类型的自定义对象 目前。请确保该层实现了
get_config
,并且from_config
保存时。另外,请使用 调用custom_objects
时load_model()
arg。
我已经在custom_objects
文档中阅读了有关TensorFlow
的信息,但是当我不使用自定义层而是使用预定义层时,我不知道如何实现它。
任何人都可以给我提示如何使其工作吗?我使用TensorFlow 2.2和Python3
答案 0 :(得分:8)
您的示例缺少f1
,precision
和recall
函数的定义。如果内置指标例如'f1'
(请注意这是一个字符串)不适合您的用例,您可以按以下方式传递custom_objects
:
def f1(y_true, y_pred):
return 1
model = tf.keras.models.load_model(path_to_model, custom_objects={'f1':f1})