gpt4 book ai didi

tensorflow - Tensorflow Federated 如何从服务器更新模型

转载 作者:行者123 更新时间:2023-12-04 08:56:22 27 4
gpt4 key购买 nike

Tensorflow 新手,因此不确定这是否是 Tensorflow Federated 的特定问题。
我正在研究对联邦学习的对抗性攻击 code .我很好奇从服务器收到的权重是如何在客户端更新的。
例如,这里是“良性”更新的代码:

@tf.function
def compute_benign_update():
"""compute benign update sent back to the server."""
tf.nest.map_structure(lambda a, b: a.assign(b), model_weights,
initial_weights)

num_examples_sum = benign_dataset.reduce(initial_state=tf.constant(0),
reduce_func=reduce_fn)

weights_delta_benign = tf.nest.map_structure(lambda a, b: a - b,
model_weights.trainable,
initial_weights.trainable)

aggregated_outputs = model.report_local_outputs()
return weights_delta_benign, aggregated_outputs, num_examples_sum
我可以看到从服务器收到的初始权重分配给 model_weights然后 reduce_fn用于在本地客户端上训练一批数据。
@tf.function
def reduce_fn(num_examples_sum, batch):
"""Runs `tff.learning.Model.train_on_batch` on local client batch."""
with tf.GradientTape() as tape:
output = model.forward_pass(batch)
gradients = tape.gradient(output.loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
return num_examples_sum + tf.shape(output.predictions)[0]
在这个函数内部发生训练和(我认为) model.trainable_variables已更新。对我来说没有意义的部分是 weights_delta_benign计算:
weights_delta_benign = tf.nest.map_structure(lambda a, b: a - b,
model_weights.trainable,
initial_weights.trainable)
似乎 model_weights.trainable 之间的区别和 initial_weights.trainable被使用了,但我们最初不是在 compute_benign_update() 的第一行中将它们设置为相等吗?功能?我假设 reduce_fn更改 initial_weights不知何故,但我没有看到 model.trainable_variables 之间的联系用于reduce函数和 initial_weights.trainable_variables .
谢谢,任何帮助表示赞赏!

最佳答案

在您指向的代码中,initial_weights只是值的集合(tf.Tensor 对象)和 model_weights是对 model 的引用的变量(tf.Variable 对象)。我们使用 initial_weights将初始值分配给模型的变量。
然后,在对 optimizer.apply_gradients(zip(gradients, model.trainable_variables)) 的调用中,您只需修改模型的变量。 ( model.trainable_variables ,它指的是与 model_weights.trainable 相同的对象。我承认,这有点令人困惑。)
所以后续计算weights_delta_benign正在计算客户训练过程结束和开始时模型的可训练变量之间的差异。

关于tensorflow - Tensorflow Federated 如何从服务器更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63809453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com