我想将本博客文章中的循环自动编码器改编为在联合环境中工作。
我对模型进行了稍微修改,以符合TFF图像分类教程中显示的示例。
def create_compiled_keras_model():
model = tf.keras.models.Sequential([
tf.keras.layers.LSTM(2, input_shape=(10, 2), name='Encoder'),
tf.keras.layers.RepeatVector(10, name='Latent'),
tf.keras.layers.LSTM(2, return_sequences=True, name='Decoder')]
)
model.compile(loss='mse', optimizer='adam')
return model
model = create_compiled_keras_model()
sample_batch = gen(1)
timesteps, input_dim = 10, 2
def model_fn():
keras_model = create_compiled_keras_model()
return tff.learning.from_compiled_keras_model(keras_model, sample_batch)
Run Code Online (Sandbox Code Playgroud)
gen函数的定义如下:
import random
def gen(batch_size):
seq_length = 10
batch_x = []
batch_y = []
for _ in range(batch_size):
rand = random.random() * 2 * np.pi
sig1 = np.sin(np.linspace(0.0 * np.pi + rand, 3.0 * np.pi …Run Code Online (Sandbox Code Playgroud) 我正在尝试联合一个具有多个输入的 keras 模型。其中一些输入是分类的,其中一些是数字的,因此我有一些 DenseFeature 层来嵌入值。
问题是,使用 tff.learning.from_keras_model()预期作为 input_spec 的字典只有 2 个元素 (x,y),但我有多个输入,然后我必须在模型中区分这些输入,以便使用 feature_columns 函数和 DenseFeature 层正确执行嵌入。
如果模型只接受“x”作为输入而没有正确的列名称,我该如何处理单个特征列?
这是代码和错误:
def create_keras_model():
l = tf.keras.layers
# handling numerical columns
for header in numerical_column_names:
feature_columns.append(feature_column.numeric_column(header))
# handling the categorical feature
pickup = feature_column.categorical_column_with_vocabulary_list(
'pickup_location_id', [i for i in range(number_of_locations)])
#pickup_one_hot = feature_column.indicator_column(pickup)
#feature_columns.append(pickup_one_hot)
pickup_embedding = feature_column.embedding_column(pickup, dimension=64)
#feature_columns.append(pickup_embedding)
feature_inputs = {
'pickup_week_day_sin': tf.keras.Input((1,), name='pickup_week_day_sin'),
'pickup_week_day_cos': tf.keras.Input((1,), name='pickup_week_day_cos'),
'pickup_hour_sin': tf.keras.Input((1,), name='pickup_hour_sin'),
'pickup_hour_cos': tf.keras.Input((1,), name='pickup_hour_cos'),
'pickup_month_sin': tf.keras.Input((1,), name='pickup_month_sin'),
'pickup_month_cos': tf.keras.Input((1,), name='pickup_month_cos'),
}
numerical_features = …Run Code Online (Sandbox Code Playgroud) 我完成了联邦学习教程。我想知道当我们在迭代过程中调用 .next 函数时,它是如何工作的。假设我们有训练数据,它是列表的列表。外部列表是客户端列表,内部列表是每个客户端的批量数据。然后,我们创建一个迭代过程,例如联合平均过程,并初始化状态。当我们对此训练数据调用 IterativeProcess.next 时,到底会发生什么。它是在每一轮中随机抽取这些数据吗?或者一次只从每个客户端获取一批数据?
假设我有一个 tf.data.Datasets 列表,每个数据集代表一个客户端数据。如何为联邦学习的下一次迭代从此列表中的采样添加一些随机性?
我的数据集的长度不一定相同。当其中一个数据集完全迭代时,该数据集是否等待所有其他数据集完全迭代其数据?
我正在执行联邦学习过程,并使用函数 tff.learning.build_federated_averaging_process 来创建联邦学习的迭代过程。正如 TFF 教程中提到的,该函数有两个参数,分别称为 client_optimizer_fn 和 server_optimizer_fn,在我看来,它们分别代表客户端和服务器的优化器。但在FedAvg论文中,似乎只有客户端进行优化,而服务器只进行平均操作,那么server_optimizer_fn到底在做什么,它的学习率意味着什么?
我在https://www.tensorflow.org/federated/federated_learning上阅读了多个指南, 例如图像分类或文本生成示例。
根据我所读到的内容,我看不到如何将张量流联合学习(tff)用于现实世界的应用程序:多个硬件客户端上的数据集。这一切看起来只是为了模拟联邦学习。
我想在多台机器上使用 tff,而不是只在一台机器上模拟它。当有人知道 tff 是否可行或找到有关如何操作的指南时,我将不胜感激。
谢谢。
我选择了这个数据集:https : //www.kaggle.com/karangadiya/fifa19
现在,我想将此 CSV 文件转换为联合数据集以适应模型。
Tensorflow 提供了有关联邦学习的教程,其中使用了预定义的数据集。但是,我的问题是如何将此特定数据集用于联合学习场景?
我正在 TensorFlow Federated (TFF) 中测试一些算法。在这方面,我想在具有不同“级别”的数据异质性(即非独立同分布性)的相同联合数据集上测试和比较它们。
因此,我想知道是否有任何方法可以以自动或半自动的方式控制和调整特定联合数据集中的非独立同分布的“级别”,例如通过 TFF API 或传统的 TF API (可能在数据集实用程序内部)。
更实际一些:例如,TFF 提供的 EMNIST 联合数据集有 3383 个客户端,每个客户端都有手写字符。然而,这些本地数据集在本地示例的数量和表示的类方面似乎相当平衡(所有类或多或少都在本地表示)。如果我想要一个联合数据集(例如,从 TFF 的 EMNIST 数据集开始),即:
tff.simulation.datasets.build_single_label_dataset 这就是这里文档的目的吗?如果是这样,我应该如何从联合数据集中使用它,例如 TFF 已经提供的数据集?我应该如何在 TFF 框架内继续准备具有这些特征的联合数据集?
我应该手工做所有的事情吗?或者你们中的一些人对自动化这个过程有什么建议吗?
另一个问题:在 Hsu 等人的论文“Measuring the Effects of Non-Identical Data Distribution for Federated Visual Classification”中,他们利用狄利克雷分布来合成一组不同的客户,并使用浓度参数控制客户端之间的一致性。这似乎是一种难以调整的方法来生成具有不同异质性水平的数据集。任何有关如何在 TFF 框架内或仅在 TensorFlow (Python) 中(考虑 EMNIST 等简单数据集)实施此策略(或类似策略)的建议也将非常有用。
万分感谢。
我看到的 TFF 教程和研究项目中的代码通常只跟踪服务器状态。我希望存在会影响联合客户端计算的内部客户端状态(例如,完全去中心化且不以联合方式更新的额外客户端内部神经网络)。
然而,在我看到的客户端计算中,它们只是服务器状态和数据的函数。是否有可能完成上述操作?
我是联邦学习的新手,刚刚了解 TensorFlow Federated TFF 框架。我脑子里有一些问题,如果有人能澄清这些问题,我将不胜感激:
提前致谢