TFF:评估联邦学习模型,损失值大幅增加

原文标题TFF: evaluating the federated learning model and got a large increase of loss value

我正在尝试按照本教程评估联邦学习模型。如下面的代码

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

我看到准确率提高了,但是损失值非常大。为什么会这样,我该如何解决?还有,我怎样才能看到每一轮的训练结果?

原文链接:https://stackoverflow.com//questions/71672074/tff-evaluating-the-federated-learning-model-and-got-a-large-increase-of-loss-va

回复

我来回复
  • Amruta Muthal的头像
    Amruta Muthal 评论

    如果模型预测正确的类别但置信度较低,则可能会发生这种情况。例如,对于 label0,如果基本事实为 1,并且您预测为 0.45,则准确度度量将其计为 FN。但如果您的模型将其预测为 0.51,这将被计入为 TP 但损失值不会有太大变化。类似地,如果 label1 为 0,并且您预测为 0.1,则损失会很低,但如果模型预测为 0.4,则损失会很高,而不会影响准确性。

    您可以检查的是每个时期的平均预测趋势如何。这可能会指出您的问题。

    2年前 0条评论
  • Tom Hammerbacher的头像
    Tom Hammerbacher 评论

    回答您问题的第二部分:您可以在 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)
    

    我希望这可以帮助您跟踪您不断增加的损失问题。

    2年前 0条评论