问题描述
我正在尝试构建一个联合学习模型,为此我需要训练多个模型,每个模型都有特定的数据。
然后我会在每一步之后将模型权重的平均值聚合成一个大的。
for round_comm in range(100):
for client in clients:
client_estimator = tf.estimator.Estimator(
model_fn=model_fn
)
# copy aggregated_weights at prevIoUs step in model
client_estimator.train(
input_fn=lambda: input_fn()
)
# Retrieve weights
# compute mean of weights
他们每个人都会训练 1 或 2 个 epoch,然后我将这些模型的所有权重聚合为一个大的
例如:
train Model_clientA on dataset_A (1st batch) for 1 epoch
train Model_clientB on dataset_B (1st batch) for 1 epoch
Aggregates every weights in Model_Clients_Agg.
Model_clientA and Model_clientB copy weights from Model_Clients_Agg.
then for next iteration :
train Model_clientA on dataset_A (next batch)
train Model_clientB on dataset_B (next batch)
etc. etc.
我已经试过了:
BATCH_SIZE = 512
EPOCHS = 4
def input_fn(data,epochs,batch_size):
# Convert the inputs to a Dataset.
dataset = tf.data.Dataset.from_tensor_slices(({'client_1':data[0],'client_2':data[1]},data[2]))
# Shuffle,repeat,and batch the examples.
SHUFFLE_SIZE = 1000
dataset = dataset.shuffle(SHUFFLE_SIZE).repeat(epochs).batch(batch_size)
dataset = dataset.prefetch(2)
# Return the dataset.
return dataset
但在这种情况下不合适。
如何提供可以适应多个数据集的 input_fn?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)