我在尋找一種方式使用各種損失函式來評價一個預先訓練TensorFlow Keras模型,例如MAE,MSE,...當我檢查Model.evaluate()功能不接受損失函式型別作為引數,是有可能每次我們想用新的損失函式進行評估時,都不需要重新編譯模型嗎?最簡單的方法是什么?
uj5u.com熱心網友回復:
無需重新編譯即可使用多個損失函式;您所要做的就是假設第一種損失方法為損失 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})
抱歉寫代碼不方便,我是新來的
uj5u.com熱心網友回復:
您可以使用新指標重新編譯模型。我相信您需要新的評估指標,而不是新的損失。
例如,定義一個這樣的模型:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/375439.html
