TFF:评估联邦学习模型,损失值大幅增加
tensorflow 388
原文标题 :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
我看到准确率提高了,但是损失值非常大。为什么会这样,我该如何解决?还有,我怎样才能看到每一轮的训练结果?
回复
我来回复-
Amruta Muthal 评论
该回答已被采纳!
如果模型预测正确的类别但置信度较低,则可能会发生这种情况。例如,对于 label0,如果基本事实为 1,并且您预测为 0.45,则准确度度量将其计为 FN。但如果您的模型将其预测为 0.51,这将被计入为 TP 但损失值不会有太大变化。类似地,如果 label1 为 0,并且您预测为 0.1,则损失会很低,但如果模型预测为 0.4,则损失会很高,而不会影响准确性。
您可以检查的是每个时期的平均预测趋势如何。这可能会指出您的问题。
2年前 -
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年前