TFF: точная настройка с предварительно обученной сетью : Точность тестирования остается постоянной после всех раундов

#tensorflow-federated #federated-learning

Вопрос:

Я хотел бы точно настроить предварительно подготовленную модель с помощью федеративного обучения, поэтому я делаю это:

 def create_keras_model():  baseModel = tf.keras.models.load_model(pathtomodel)  headModel = baseModel.output  model_output = tf.keras.layers.Dense(3)(headModel)  model = tf.keras.Model(inputs=baseModel.input, outputs=model_output)  for layer in baseModel.layers:  layer.trainable = False  return model  state = iterative_process.initialize() keras_model = create_keras_model() state = tff.learning.state_with_new_model_weights(  state,  trainable_weights=[v.numpy() for v in keras_model.trainable_weights],  non_trainable_weights=[  v.numpy() for v in keras_model.non_trainable_weights  ])  evaluation = tff.learning.build_federated_evaluation(model_fn)  

А вот и цикл обучения :

 for round_num in range(1, NUM_ROUNDS):  state, _ = iterative_process.next(state, train_data)  test_metrics = evaluation(state.model, test_data)  print(test_metrics))  

Проблема в том, что точность теста по-прежнему остается постоянной и не увеличивается после всего раунда :

 round 1, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.8680933)]) round 2, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.836558)]) round 3, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.82953715)]) round 4, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.82713753)]) round 5, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.82613766)]) round 6, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.8256878)]) round 7, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.82548285)]) round 8, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.825384)]) round 9, metrics=OrderedDict([('categorical_accuracy', 0.67105263), ('loss', 0.825332)])  

Я хотел бы понять причину, если есть другой способ сделать это? Зная, что мой набор данных-это набор данных изображений с 3 классами.

Комментарии:

1. Похоже, что в определении модели может быть синтаксическая ошибка, model_output = tf.keras.layers.Dense(3) возможно, ее нужно вызвать headModel из строки над ней? Можем ли мы включить код evaluation() функции в вопрос? Это может помочь получить лучшие ответы.