【问题标题】:Load data in each client在每个客户端中加载数据
【发布时间】:2021-10-27 12:48:44
【问题描述】:

大家:

我尝试在联合进程中加载​​'/root/.tff/emnist_all.sqlite'。进我能找到的例子,只看到本地模拟。

    print('### CLIENT_DATA')  
    database_path = '/root/.tff/emnist_all.sqlite'
    client_data = sql_client_data.SqlClientData(database_path, 'digits_only_train').preprocess(_add_proto_parsing).datasets

但这只是加载服务器数据(模拟客户端数据)。

我认为有必要使用federated_map 来加载客户端的每个数据集。我有点迷茫。

请大家帮帮我好吗?

剩下的代码(总结)是:

    print('### GET CHANNELS')
    # set up the remote executors
    channels = get_channels(list_host)
    tff.backends.native.set_remote_execution_context(channels)
    
    print('### TRAINER')
    trainer = tff.learning.build_federated_averaging_process(model_fn, client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.01))
    
    print('### EVALUATE')
    evaluate(trainer, preprocessed_data_for_clients)

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    首先,将数据集(或 tf.data.Dataset)视为“创建数据迭代器的方法”(而不是数据集本身)可能会有所帮助,这与 numpy.ndarraypandas.DataFrame 不同。数据被延迟加载,直到数据集开始工作(例如 for batch in dataset: 循环)才可用。由文件支持的tf.data.Datasets 通常对图中的文件路径进行编码,然后发送给客户端执行。

    现在,SqlClientDatatf.data.Dataset 构造的包装器。它主要用于在一组固定的、集中的代理数据上模拟 FL。使用的主要方法是SqlClientData.create_tf_dataset_for_client,它创建tf.data.experimental.SqlDataset 对象。它们在计算中对database_path 进行编码,指示客户端从何处读取其数据集。这意味着当客户端即将在接收到的图中的SqlDataset 上执行训练循环时,它将查看图中编码的路径;这将是'/root/.tff/emnist_all.sqlite'

    相反,当在服务器上构建“数据集配方”时,我们可以尝试指向客户端上的路径。一个非常幼稚的例子可能是这样的:

    training_process = tff.learning.build_federated_averaging_process(...)
    
    state = training_process.initialize()
    federated_datasets = [
      tf.data.TFRecordDataset('/path/to/client1.tfrecords'),
      tf.data.TFRecordDataset('/path/to/client2.tfrecords'),
      tf.data.TFRecordDataset('/path/to/client3.tfrecords'),
    ]
    state, metrics = training_process(state, federated_datasets)
    

    然后,我们希望将每个远程工作人员设置为在 /path/to/client1.tfrecords/path/to/client1.tfrecords/path/to/client3.tfrecords 具有本地可访问的 TFRecord 文件。

    【讨论】:

    • 先生。 Z.Garrett,非常感谢您的回复。我会用这个来看看我是否能取得进展。我会根据我的发现继续讨论。最好的问候,
    • @zachary-garrett 先生,您能给我一个关于如何将 ClientData 转换为 TFRecord 的提示吗?非常感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多