我正在嘗試按照本教程評估聯邦學習模型。如下面的代碼
test_data = test.create_tf_dataset_from_all_clients().map(reshape_data).batch(2)
test_data = test_data.map(lambda x: (x['x'], x['y']))
def evaluate(server_state):
keras_model = create_keras_model()
keras_model.compile(
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]
)
keras_model.set_weights(server_state)
keras_model.evaluate(test_data)
server_state = federated_algorithm.initialize()
evaluate(server_state)
>>> 271/271 [==============================] - 1s 2ms/step - loss: 23.7232 - sparse_categorical_accuracy: 0.3173
之后,我對其進行多輪訓練,然后進行評估
server_state = federated_algorithm.initialize()
for round in range(20):
server_state = federated_algorithm.next(server_state, train_data)
evaluate(server_state)
>>> 271/271 [==============================] - 1s 2ms/step - loss: 5193926.5000 - sparse_categorical_accuracy: 0.4576
我看到準確率提高了,但是損失值非常大。為什么會這樣,我該如何解決?另外,我怎樣才能看到每一輪的訓練結果?
uj5u.com熱心網友回復:
如果模型預測的類別正確但置信度較低,則可能會發生這種情況。例如,對于 label0,如果 ground truth 為 1 并且您預測為 0.45,則準確度度量將其計為 FN。但如果您的模型預測為 0.51,這將被視為 TP,但損失值不會有太大變化。同樣,如果 label1 為 0,而您預測為 0.1,則損失會很低,但如果模型預測 0.4,則損失會很高,而不會影響準確性。
您可以檢查的是每個時期的平均預測趨勢如何。這可能會指出您的問題。
uj5u.com熱心網友回復:
回答您問題的第二部分:您可以在 for 回圈中呼叫評估以查看每一輪后的結果。
for round in range(20):
server_state = federated_algorithm.next(server_state, train_data)
evaluate(server_state)
要每第二輪查看一次結果,您可以使用以下內容:
for round in range(20):
server_state = federated_algorithm.next(server_state, train_data)
if (round% 2) == 0:
evaluate(server_state)
我希望這可以幫助您跟蹤您不斷增加的損失問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453223.html
下一篇:為什么我收到此錯誤“圖層“dense_30”的輸入0與圖層不兼容:預期min_ndim=2,發現ndim=1。收到完整形狀:(無,)”
