我想用tff.learning.build_federated_evaluation
来评估我的联邦学习模型。最初,得到了合理的结果。但是我可以运行多轮评估过程(如在这里完成的培训阶段)以获得更稳定的结果吗?
求值代码如下所示。
train, test = source.train_test_client_split(source, 2,seed=0)
test_client_ids = test.client_ids
test_data= [test.create_tf_dataset_from_all_clients().map(reshape_data)
.batch(batch_size=10)
for c in test_client_ids]
eval_process=tff.learning.build_federated_evaluation(model_fn)
eval_process(state.model, test_data)
求值输出。
OrderedDict([('eval',
OrderedDict([('sparse_categorical_accuracy', 0.53447974),
('loss', 1.0230521),
('num_examples', 11514),
('num_batches', 1152)]))])
在同一个test_data
上多次运行eval_process
不会产生新的信息,并且每次都期望产生相同的结果。这些结果将是稳定的,在某种意义上它们不会改变,但可能并不有趣。
在多轮中运行eval_process
,每轮使用不同的test_data
可以被认为是从较大的人群中抽样一组客户,以获得模型质量的估计。从多个样本中计算许多估计可以与统计技术一起使用,更多轮导致更稳定模型质量的改进估计。
这大概是在描述后面的聚合服务的1和2中使用的技术。