【问题标题】:Federated learning : convert my own image dataset into tff simulation Clientdata联邦学习:将自己的图像数据集转换成tff模拟Clientdata
【发布时间】:2020-01-14 20:33:42
【问题描述】:

这是我的联邦学习测试的代码

from __future__ import absolute_import, division, print_function
import os
import collections
import warnings
from six.moves import range
import numpy as np
import six
import tensorflow as tf
import tensorflow_federated as tff
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint
import PIL


#pretrain

train_datagen1 = tf.keras.preprocessing.image.ImageDataGenerator(vertical_flip=True)
training_set1= train_datagen1.flow_from_directory('folder1/train',target_size=(200, 200), batch_size=32)



)




现在,当我想在 tensorflow federtaed 中创建 sample_batch 之类的教程以进行图像分类时

我写了这一行,发现这个错误

example_dataset = training_set1.create_tf_dataset_for_client(training_set1.client_ids[0])

错误


TypeError Traceback(最近一次调用最后一次) 在 1 training_set1.element_type_structure ----> 2 example_dataset = training_set1.create_tf_dataset_for_client(training_set1.client_ids[0])

TypeError: 'abstractproperty' 对象不支持索引


你能告诉我我必须如何创建 dummy_batch 以便将 keras 模型转换为 tff.learning.from_compiled_keras_model(model, dummy_batch)

【问题讨论】:

    标签: python tensorflow keras tensorflow-federated federated-learning


    【解决方案1】:

    感谢您对 TFF 的关注!

    通常,TFF 被设计为摄取tf.data.Dataset 对象,因此上面的示例需要一些额外的预处理。

    好消息是,有一个existing tutorial 显示了这样做的示例。在上面,类似下面的东西应该可以工作:

    ds = tf.data.Dataset.from_generator(
        img_gen.flow_from_directory, args=[<your_directory>], 
        output_types=<your_types>, 
        output_shapes=<your_shapes>
    )
    

    通常,可以将ClientData 对象视为一种奇特的dict 将客户端ID 映射到tf.data.DatasetsClientData本身是一个抽象类,不能直接实例化,提供了类方法来构造ClientData的真实实例化。一种应该在这里工作的类方法是tff.simulation.ClientData.from_clients_and_fn。在这里,如果您传递一个 client_ids 列表和一个在给定客户端 ID 时返回适当数据集的函数,您将获得一个功能齐全的 ClientData

    我认为在这里,定义您可能使用的函数的一种方法是构造一个 Python dict,它将客户端 ID 映射到 tf.data.Dataset 对象——然后您可以定义一个接受客户端 ID 的函数,查找字典中的数据集,并返回数据集。

    希望这会有所帮助!

    【讨论】:

    • 它应该是一批具有 Keras 模型所期望的形状和类型的数据如果它是在本地训练的,所以如果我正确解释了你的问题,它应该 不嵌套。特别是,虚拟批处理用于从底层 Keras 模型调用 train_on_batch 方法(因为 Keras 会延迟实例化一些属性)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2012-07-31
    相关资源
    最近更新 更多