我想使blog post中的循环自动编码器适应联邦环境。
我对模型进行了稍微修改,以符合TFF image classification tutorial.
中显示的示例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)
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 + rand, seq_length * 2))
sig2 = np.cos(np.linspace(0.0 * np.pi + rand, 3.0 * np.pi + rand, seq_length * 2))
x1 = sig1[:seq_length]
y1 = sig1[seq_length:]
x2 = sig2[:seq_length]
y2 = sig2[seq_length:]
x_ = np.array([x1, x2])
y_ = np.array([y1, y2])
x_, y_ = x_.T, y_.T
batch_x.append(x_)
batch_y.append(y_)
batch_x = np.array(batch_x)
batch_y = np.array(batch_y)
return batch_x, batch_x #batch_y
到目前为止,我一直找不到任何未使用TFF存储库中样本数据的文档。
如何修改它以创建联合数据集并开始训练?
答案 0 :(得分:1)
在非常高的层次上,要使用带有TFF的任意数据集,需要执行以下步骤:
Federated Learning for Image Classification tutorial使用tff.learning.build_federated_averaging_process通过FedAvg算法建立联合优化。
在该笔记本中,以下代码正在执行一轮联合优化,其中将客户端数据集传递给流程的.next
方法:
state, metrics = iterative_process.next(state, federated_train_data)
federated_train_data
是list
中的Python tf.data.Dataset
,每个参与此回合的客户都使用一个。
TFF(在tff.simulation.datasets下)提供的固定数据集是使用tff.simulation.ClientData界面实现的,该界面管理客户端→数据集映射和tff.data.Dataset
的创建。
如果您打算重复使用数据集,将其实现为tff.simulation.ClientData
可能会使将来的使用变得更加容易。