(我已将问题发布在https://github.com/tensorflow/federated/issues/793也许也在这里!)
我已经将自己的数据和模型定制为联合接口和融合的训练。但我对图像分类任务中的一个问题感到困惑,整个数据集非常大并且无法存储在单个数据集中federated_train_data
也不会一次性导入到内存中。所以我需要将数据集从硬盘实时批量加载到内存中并使用Keras model.fit_generator
代替model.fit
在培训期间,人们用来处理大数据的方法。
我想在iterative_process
如图像分类教程所示,该模型适合一组固定的数据。有什么方法可以调整代码以使其适合数据生成器?我已经查看了源代码,但仍然很困惑。如果有任何提示,我将非常感激。
一般来说,TFF 认为数据馈送是“Python 驱动程序循环”的一部分,这在编写 TFF 代码时是一个有用的区分。
事实上,在写TFF时,一般可以分为三个层次:
- TensorFlow 定义本地处理(即,将在客户端、服务器、聚合器或人们可能想要的任何其他位置进行的处理,但只有一个single放置。
- 本机 TFF 定义数据通信方式across展示位置。例如,写
tff.federated_sum
里面的一个tff.federated_computation
装饰器;编写此行声明“此数据从客户端移动到服务器,并通过求和运算符聚合”。
- Python“驱动”TFF 循环,例如运行单轮。最终级别的工作是完成“真正的”联邦学习运行时要做的事情;这里的一个例子是为某一轮选择客户。
如果牢记这种细分,使用生成器或其他一些惰性求值式构造将数据输入联合计算就会变得相对简单;它只是在 Python 级别完成的。
实现此目的的一种方法是通过create_tf_dataset_for_client方法上的ClientData
目的;当你循环时,你的Python代码可以从列表中选择client_ids
,然后你可以实例化一个新列表tf.data.Datasets
并将它们作为您的新客户数据集传递。这种相对简单的用法的一个例子是here,以及更高级的用法(涉及定义自定义client_datasets_fn
这需要client_id
作为参数,并将其传递给单独定义的训练循环将是here,在关联到的代码中这张纸.
最后一点:实例化tf.data.Dataset
实际上并没有将数据集加载到内存中;数据集仅在迭代时才加载。我从该书的主要作者那里收到了一个有用的提示tf.data.Dataset
就是想到tf.data.Dataset
更像是一个“数据集配方”,而不是数据集本身的字面实例。有人建议也许更好的名字是DataSource
对于这个构造;希望这可以帮助我们了解实际发生的事情的心理模型。同样,使用tff.simulation.ClientData
对象通常不应该真正将任何内容加载到内存中,直到在客户端的训练中对其进行迭代;这应该会使管理数据集内存的一些细微差别变得更简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)