#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()
функции в вопрос? Это может помочь получить лучшие ответы.