Почему моя точность не увеличивается в TFF с моделью VGG16? - PullRequest
0 голосов
/ 03 марта 2020

Я собрал свой код TFF с моделью VGG16. Однако во время тренировок моя точность не меняется и остается около 0,5 даже после 11 раундов. Я пытался изменить скорость обучения, но не оказывает существенного влияния. !!! Итак, какие метрики и вещи я могу изменить в коде, чтобы повысить точность, потому что когда я запускаю свой код, точность стабильна и не увеличивается !!

Вот код моего VGG16

def create_compiled_keras_model():

    IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)
    VGG16_MODEL = tf.keras.applications.VGG16(input_shape=IMG_SHAPE,
                                               include_top=False,
                                               weights='imagenet')

#VGG16_MODEL.trainable=False
    global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
    prediction_layer = tf.keras.layers.Dense(......)


    model = tf.keras.Sequential([ VGG16_MODEL, global_average_layer, prediction_layer ])


    model.compile  .............
    return model

...
iterative_process = tff.learning.build_federated_averaging_process(model_fn)
state = iterative_process.initialize()
for round_num in range(2, 12):
  state, metrics = iterative_process.next(state, federated_train_data)
  print('round {:2d}, metrics={}'.format(round_num, metrics, state))

1 Ответ

0 голосов
/ 05 марта 2020

Первое, что я хотел бы исследовать здесь: эта модель тренируется централизованно?

На это можно ответить, попробовав что-то вроде:

model = create_compiled_keras_model()
# Assumes client_data_object is tff.simulation.ClientData object
centralized_dataset = client_data_object.create_tf_dataset_from_all_clients()
model.fit(centralized_dataset, verbose=1)

Если эти цифры не t go вниз, маловероятно, что обучение модели федеративным способом приведет к конвергенции.

Вы упоминаете, что инициализация может быть проблемой здесь; если это проблема, она должна появиться здесь, так как TFF фактически вытягивает инициализацию инициализации, закодированной в самой модели_fn .

Вы также упоминаете пакетную норму; Судя по всему, лично я не видел, чтобы пакетная норма использовалась в федеративных условиях хорошо. Мы видели групповую норму, работающую в некоторых задачах по зрению, но это может быть не сразу связать групповую норму с архитектурой VGG в зависимости от API, предоставляемого Keras.

Если эти числа do go вниз, то первое, что я бы исследовал в федеративной обстановке, это установил бы скорость обучения намного выше (например, на 2-3 порядка), чем та, которую вы видите хорошо в централизованной обстановке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...