увеличение потерь при обновлении «Состояние»

Я хотел бы обновить состояние, вот что я написал:

      def create_keras_model():
...
   return model
iterative_process = tff.learning.build_federated_averaging_process(..)
state = iterative_process.initialize()
keras_new_model = create_keras_model()
state = tff.utils.update_state(state, model=tff.learning.ModelWeights.from_model(keras_new_model)) 

Моя проблема в том, что когда я добавляю эти строки, потери увеличиваются вопреки точности, которая дает небольшое уменьшение:

      round  1, metrics=OrderedDict([('categorical_accuracy', 0.4675926), ('loss', 8.581259)])
round  2, metrics=OrderedDict([('categorical_accuracy', 0.65625), ('loss', 5.4126678)])
round  3, metrics=OrderedDict([('categorical_accuracy', 0.6018519), ('loss', 6.37924)])
round  4, metrics=OrderedDict([('categorical_accuracy', 0.587963), ('loss', 6.5979366)])
round  5, metrics=OrderedDict([('categorical_accuracy', 0.6400463), ('loss', 5.7463913)])
round  6, metrics=OrderedDict([('categorical_accuracy', 0.6909722), ('loss', 4.872179)])
round  7, metrics=OrderedDict([('categorical_accuracy', 0.6469907), ('loss', 5.6218925)])
round  8, metrics=OrderedDict([('categorical_accuracy', 0.7037037), ('loss', 4.723536)])
round  9, metrics=OrderedDict([('categorical_accuracy', 0.7002315), ('loss', 4.774122)])
round 10, metrics=OrderedDict([('categorical_accuracy', 0.7060185), ('loss', 4.6346316)])
round 11, metrics=OrderedDict([('categorical_accuracy', 0.6724537), ('loss', 5.213738)])
round 12, metrics=OrderedDict([('categorical_accuracy', 0.6608796), ('loss', 5.450448)])

для оценки я использую этот цикл:

      evaluation = tff.learning.build_federated_evaluation(model_fn)
NUM_ROUNDS = 200
for round_num in range(1, NUM_ROUNDS):
    state, _ = iterative_process.next(state, train_data) 
    test_metrics = evaluation(state.model, test_data) 
    print('round {:2d}, metrics={}'.format(round_num, test_metrics))

Есть ли другое решение этой проблемы? Спасибо

1 ответ

Это показатели обучения или показатели тестирования? Важно отметить, что показатели обучения в федеративном обучении ведут себя «странно»; увидеть, что ошибка MSE отличается во время обучения и оценки в федеративном тензорном потоке .

Если create_keras_modelзагружает предварительно обученные веса, которые уже точно изучили распределение данных, это может быть некоторый шаг тонкой настройки. Однако, если это показатели обучения, они могут не рассказать всей истории (как указано выше). Я также рекомендовал бы пробежать больше раундов, 10 раундов обычно недостаточно в федеративном обучении.

Дополнительные сведения об интерпретации показателей машинного обучения в целом см. В разделе Как интерпретировать увеличение потерь и точности?.

Другие вопросы по тегам