使用各种损失函数评估预训练的 Tensorflow keras 模型

Evaluating Pretrained Tensorflow keras model using various loss functions

我正在寻找一种使用各种损失函数(例如 MAEMSE、.... 来评估预训练 TensorFlow Keras 模型的方法,当我检查 Model.evaluate() 函数不接受损失函数类型作为参数,是否可以做到这一点而不需要每次我们想用新的损失函数进行评估时重新编译模型?最简单的方法是什么?

无需重新编译即可使用多个损失函数;您所要做的就是假设第一个损失方法为损失 1,第二个为损失 2。

optimizer1 = tf.train.AdamOptimizer().minimize(loss1)
 
optimizer2 = tf.train.AdamOptimizer().minimize(loss2)

_, _, l1, l2 = sess.run(fetches=[optimizer1, optimizer2, loss1, loss2], feed_dict={x: batch_x, y: batch_y})

不好意思写代码不便,我是新来的

您可以使用新指标重新编译您的模型。我相信您需要新的评估指标,而不是新的损失。

例如定义这样一个模型:

import tensorflow as tf

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(x_train.shape[1:])),
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Dense(10, activation="softmax"),
])

model.compile(loss="sparse_categorical_crossentropy", metrics=["accuracy"], optimizer="adam")
model.fit(x_train, y_train, epochs=3, validation_split=0.2)
model.evaluate(x_test, y_test) 
# 313/313 [=================] - 1s 3ms/step - loss: 0.2179 - accuracy: 0.9444

然后你可以像这样重新编译和评估:

# Change metrics
model.compile(metrics=["mae", "mse"], loss="sparse_categorical_crossentropy")
model.evaluate(x_test, y_test)
# 313/313 [=================] - 1s 3ms/step - loss: 0.2179 - mae: 4.3630 - mse: 27.3351