如何在 Tensorflow Fedarated 中加载 Fashion MNIST 数据集?
How to load Fashion MNIST dataset in Tensorflow Fedarated?
我正在使用 Tensorflow federated 开发一个项目。我已经设法使用 TensorFlow 联邦学习模拟提供的库来加载、训练和测试一些数据集。
比如我加载emnist数据集
emnist_train, emnist_test = tff.simulation.datasets.emnist.load_data()
并且它得到了 load_data() 返回的数据集作为 tff.simulation.ClientData 的实例。这是一个允许我迭代客户端 ID 并允许我对数据的 select 子集进行模拟的接口。
len(emnist_train.client_ids)
3383
emnist_train.element_type_structure
OrderedDict([('pixels', TensorSpec(shape=(28, 28), dtype=tf.float32, name=None)), ('label', TensorSpec(shape=(), dtype=tf.int32, name=None))])
example_dataset = emnist_train.create_tf_dataset_for_client(
emnist_train.client_ids[0])
我正在尝试使用 Keras 加载 fashion_mnist 数据集以执行一些联合操作:
fashion_train,fashion_test=tf.keras.datasets.fashion_mnist.load_data()
但是我得到这个错误
AttributeError: 'tuple' object has no attribute 'element_spec'
因为 Keras returns 一个 Numpy 数组的元组而不是像以前那样的 tff.simulation.ClientData:
def tff_model_fn() -> tff.learning.Model:
return tff.learning.from_keras_model(
keras_model=factory.retrieve_model(True),
input_spec=fashion_test.element_spec,
loss=loss_builder(),
metrics=metrics_builder())
iterative_process = tff.learning.build_federated_averaging_process(
tff_model_fn, Parameters.server_adam_optimizer_fn, Parameters.client_adam_optimizer_fn)
server_state = iterative_process.initialize()
综上所述,
有什么方法可以从 Keras 元组 Numpy 数组创建 tff.simulation.ClientData
的元组元素?
我想到的另一个解决方案是使用
tff.simulation.HDF5ClientData
并加载
以 HDF5
格式手动选择适当的文件 (train.h5, test.h5)
以获得 tff.simulation.ClientData
,但我的问题是我找不到 url for fashion_mnist HDF5
文件格式我的意思是训练和测试都是这样的:
fileprefix = 'fed_emnist_digitsonly'
sha256 = '55333deb8546765427c385710ca5e7301e16f4ed8b60c1dc5ae224b42bd5b14b'
filename = fileprefix + '.tar.bz2'
path = tf.keras.utils.get_file(
filename,
origin='https://storage.googleapis.com/tff-datasets-public/' + filename,
file_hash=sha256,
hash_algorithm='sha256',
extract=True,
archive_format='tar',
cache_dir=cache_dir)
dir_path = os.path.dirname(path)
train_client_data = hdf5_client_data.HDF5ClientData(
os.path.join(dir_path, fileprefix + '_train.h5'))
test_client_data = hdf5_client_data.HDF5ClientData(
os.path.join(dir_path, fileprefix + '_test.h5'))
return train_client_data, test_client_data
我的最终目标是使 fashion_mnist 数据集与 TensorFlow 联合学习一起工作。
你走在正确的轨道上。回顾一下:tff.simulation.dataset
APIs are tff.simulation.ClientData
objects. The object returned by tf.keras.datasets.fashion_mnist.load_data
返回的数据集是 tuple
个 numpy 数组。
所以需要实现一个tff.simulation.ClientData
来包装tf.keras.datasets.fashion_mnist.load_data
返回的数据集。之前关于实现 ClientData
个对象的一些问题:
- Federated learning : convert my own image dataset into tff simulation Clientdata
- How define tff.simulation.ClientData.from_clients_and_fn Function?
- Is there a reasonable way to create tff clients datat sets?
这确实需要回答一个重要的问题:Fashion MNIST 数据应该如何拆分为个人用户?数据集不包含可用于分区的特征。研究人员提出了几种综合划分数据的方法,例如随机抽取每个参与者的一些标签,但这对模型训练有很大的影响,在这里投入一些思考是有用的。
我正在使用 Tensorflow federated 开发一个项目。我已经设法使用 TensorFlow 联邦学习模拟提供的库来加载、训练和测试一些数据集。
比如我加载emnist数据集
emnist_train, emnist_test = tff.simulation.datasets.emnist.load_data()
并且它得到了 load_data() 返回的数据集作为 tff.simulation.ClientData 的实例。这是一个允许我迭代客户端 ID 并允许我对数据的 select 子集进行模拟的接口。
len(emnist_train.client_ids)
3383
emnist_train.element_type_structure
OrderedDict([('pixels', TensorSpec(shape=(28, 28), dtype=tf.float32, name=None)), ('label', TensorSpec(shape=(), dtype=tf.int32, name=None))])
example_dataset = emnist_train.create_tf_dataset_for_client(
emnist_train.client_ids[0])
我正在尝试使用 Keras 加载 fashion_mnist 数据集以执行一些联合操作:
fashion_train,fashion_test=tf.keras.datasets.fashion_mnist.load_data()
但是我得到这个错误
AttributeError: 'tuple' object has no attribute 'element_spec'
因为 Keras returns 一个 Numpy 数组的元组而不是像以前那样的 tff.simulation.ClientData:
def tff_model_fn() -> tff.learning.Model:
return tff.learning.from_keras_model(
keras_model=factory.retrieve_model(True),
input_spec=fashion_test.element_spec,
loss=loss_builder(),
metrics=metrics_builder())
iterative_process = tff.learning.build_federated_averaging_process(
tff_model_fn, Parameters.server_adam_optimizer_fn, Parameters.client_adam_optimizer_fn)
server_state = iterative_process.initialize()
综上所述,
有什么方法可以从 Keras 元组 Numpy 数组创建
tff.simulation.ClientData
的元组元素?我想到的另一个解决方案是使用
tff.simulation.HDF5ClientData
并加载 以HDF5
格式手动选择适当的文件(train.h5, test.h5)
以获得tff.simulation.ClientData
,但我的问题是我找不到 url for fashion_mnistHDF5
文件格式我的意思是训练和测试都是这样的:fileprefix = 'fed_emnist_digitsonly' sha256 = '55333deb8546765427c385710ca5e7301e16f4ed8b60c1dc5ae224b42bd5b14b' filename = fileprefix + '.tar.bz2' path = tf.keras.utils.get_file( filename, origin='https://storage.googleapis.com/tff-datasets-public/' + filename, file_hash=sha256, hash_algorithm='sha256', extract=True, archive_format='tar', cache_dir=cache_dir) dir_path = os.path.dirname(path) train_client_data = hdf5_client_data.HDF5ClientData( os.path.join(dir_path, fileprefix + '_train.h5')) test_client_data = hdf5_client_data.HDF5ClientData( os.path.join(dir_path, fileprefix + '_test.h5')) return train_client_data, test_client_data
我的最终目标是使 fashion_mnist 数据集与 TensorFlow 联合学习一起工作。
你走在正确的轨道上。回顾一下:tff.simulation.dataset
APIs are tff.simulation.ClientData
objects. The object returned by tf.keras.datasets.fashion_mnist.load_data
返回的数据集是 tuple
个 numpy 数组。
所以需要实现一个tff.simulation.ClientData
来包装tf.keras.datasets.fashion_mnist.load_data
返回的数据集。之前关于实现 ClientData
个对象的一些问题:
- Federated learning : convert my own image dataset into tff simulation Clientdata
- How define tff.simulation.ClientData.from_clients_and_fn Function?
- Is there a reasonable way to create tff clients datat sets?
这确实需要回答一个重要的问题:Fashion MNIST 数据应该如何拆分为个人用户?数据集不包含可用于分区的特征。研究人员提出了几种综合划分数据的方法,例如随机抽取每个参与者的一些标签,但这对模型训练有很大的影响,在这里投入一些思考是有用的。