в контексте TFF: зависит ли этап оценки от процесса обучения? - PullRequest
0 голосов
/ 19 марта 2020

Мы все знаем, что шаг оценки очень важен для оценки нашей модели на тестовой основе. Я хотел бы знать, нужно ли go пройти круглый этап (обучение) перед выполнением оценки? что значит мой код может быть таким? это правильно, как показано ниже ??

emnist_train, emnist_test = tff.simulation.datasets.emnist.load_data()
...
def create_keras_model():
  return tf.keras.models.Sequential([
      tf.keras.layers.Input(shape=(784,)),
      tf.keras.layers.Dense(10, kernel_initializer='zeros'),
      tf.keras.layers.Softmax(),
  ])
def model_fn():
  # We _must_ create a new model here, and _not_ capture it from an external
  # scope. TFF will call this within different graph contexts.
  keras_model = create_keras_model()
  return tff.learning.from_keras_model(
      keras_model,
      dummy_batch=sample_batch,
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
iterative_process = tff.learning.build_federated_averaging_process(
    model_fn,
    client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02),
    server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0))
state = iterative_process.initialize()
evaluation = tff.learning.build_federated_evaluation(model_fn)
train_metrics = evaluation(state.model, federated_train_data)
federated_test_data = make_federated_data(emnist_test, sample_clients)
test_metrics = evaluation(state.model, federated_test_data)

без прохождения этого шага

for round_num in range(2, 11):
  state, metrics = iterative_process.next(state, federated_train_data)
  print('round {:2d}, metrics={}'.format(round_num, metrics))

Возможно ли это и даст мне правильный результат? Спасибо вам всем

1 Ответ

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

Определенно возможно провести раунд оценки перед тренировкой, но правильность ее определения зависит от желаемого измерения.

Приведенный выше код, скорее всего, покажет очень низкую точность оценки, так как модель не проходит. любые шаги поезда и инициализируются до нулевого веса (несомненно, не лучшие параметры модели для набора данных EMNIST). Я подозреваю, что это нежелательно.

Перемещение оценки в l oop за раунды может быть информативным, например, выполнение оценки на данных тренировки до с локальными шагами. Это может помочь избежать некоторых сложных интерпретаций показателей обучения в Федеративном обучении. Код будет выглядеть примерно так:

for round_num in range(2, 11):
  train_metrics = evaluation(state.model, federated_train_data)  # evaluate here
  state, _ = iterative_process.next(state, federated_train_data)  # ignore train metrics
  print('round {:2d}, metrics={}'.format(round_num, train_metrics))

test_metrics = evaluation(state.model, federated_test_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...