gpt4 book ai didi

python - 加载 keras 模型 h5 未知指标

转载 作者:行者123 更新时间:2023-12-05 08:50:35 25 4
gpt4 key购买 nike

我训练了一个 keras CNN 监控指标如下:

METRICS = [
TruePositives(name='tp'),
FalsePositives(name='fp'),
TrueNegatives(name='tn'),
FalseNegatives(name='fn'),
BinaryAccuracy(name='accuracy'),
Precision(name='precision'),
Recall(name='recall'),
AUC(name='auc'),
]

然后是model.compile:

 model.compile(optimizer='nadam', loss='binary_crossentropy',
metrics=METRICS)

它运行完美,我保存了我的 h5 模型 (model.h5)。

现在我已经下载了模型,我想在其他导入模型的脚本中使用它:

 from keras.models import load_model
model = load_model('model.h5')
model.predict(....)

但是在运行期间编译器返回:

 ValueError: Unknown metric function: {'class_name': 'TruePositives', 'config': {'name': 'tp', 'dtype': 'float32', 'thresholds': None}}

我应该如何处理这个问题?

提前致谢

最佳答案

当您有自定义指标时,您需要遵循稍微不同的方法。

  1. 创建模型,训练并保存模型
  2. 使用 custom_objectscompile = False 加载模型>
  3. 最后用自定义对象编译模型

我在这里展示方法

import tensorflow as tf
from tensorflow import keras
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# Custom Loss1 (for example)
#@tf.function()
def customLoss1(yTrue,yPred):
return tf.reduce_mean(yTrue-yPred)

# Custom Loss2 (for example)
#@tf.function()
def customLoss2(yTrue, yPred):
return tf.reduce_mean(tf.square(tf.subtract(yTrue,yPred)))

def create_model():
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy', customLoss1, customLoss2])
return model

# Create a basic model instance
model=create_model()

# Fit and evaluate model
model.fit(x_train, y_train, epochs=5)

loss, acc,loss1, loss2 = model.evaluate(x_test, y_test,verbose=1)
print("Original model, accuracy: {:5.2f}%".format(100*acc)) # Original model, accuracy: 98.11%

# saving the model
model.save('./Mymodel',save_format='tf')

# load the model
loaded_model = tf.keras.models.load_model('./Mymodel',custom_objects={'customLoss1':customLoss1,'customLoss2':customLoss2},compile=False)

# compile the model
loaded_model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy', customLoss1, customLoss2])

# loaded model also has same accuracy, metrics and loss
loss, acc,loss1, loss2 = loaded_model.evaluate(x_test, y_test,verbose=1)
print("Loaded model, accuracy: {:5.2f}%".format(100*acc)) #Loaded model, accuracy: 98.11%

关于python - 加载 keras 模型 h5 未知指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61513447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com