0

我们都知道,评估步骤对于在测试基础上评估我们的模型非常重要。我想知道在进行评估之前是否需要经过一轮步骤(培训)?这意味着我的代码可以是这样的吗?它是正确的,如下所示?

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))

这可能并给我正确的结果吗?谢谢大家

4

1 回答 1

0

绝对可以在训练前进行一轮评估,但是否正确取决于所需的测量。

上面的代码可能会报告非常低的评估准确度,因为模型没有经过任何训练步骤并且被初始化为零权重(肯定不是 EMNIST 数据集的最佳模型参数)。我怀疑这是不希望的。

将评估移到循环中可能会提供信息,例如在采取本地步骤之前对训练数据进行评估。这有助于避免在联邦学习中对训练指标的一些困难解释。代码看起来像:

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)
于 2020-03-23T15:06:36.343 回答