问题标签 [federated-learning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - 具有 batch_normalization 的 resnet 18 的联合平均 (fedavg) 在第一轮之后做出相同的预测,但在其他轮中没有
我试图用cifar10 数据集和 resnet18实现tensorflow 联合的简单fedavg 。这也是pytorch 的实现. 就像可训练的一样,我将不可训练的批量标准化参数汇总到服务器并对其进行平均。我使用了 5 个客户端,数据集被随机分为 5 个,每个客户端有 50k/5=10k 个训练样本,因此没有严重的偏态分布。在训练之后,我用完整的测试数据集、10k 个样本测试了每个客户端,我也用这些数据集来测试服务器。问题是在第一轮训练之后,尽管每个客户端都有 20-25% 的准确率,但服务器有 10% 的准确率,并且基本上对每个输入做出几乎相同的预测。这是第一轮唯一的情况,因为在那轮之后服务器几乎总是比该轮中的任何客户端具有更好的准确性。例如
为了解决第一轮的问题,我尝试重复数据集,但没有帮助。之后,我尝试为每个客户端使用所有 cifar10 训练样本,而不是为每个客户端创建 5 个不同的 10k 样本数据集,我使用所有 50k 样本作为数据集。
客户端显然具有相同的初始化,但我猜由于使用 gpu 存在一些细微的精度差异,但每个都有 45+% 的精度。但正如你所看到的,即使这对第一轮也没有帮助。当使用简单的 cnn 时,例如“.main”中可用的 cnn,带有合适的参数,这个问题不存在。并使用
代替
在第一轮减少了这个问题,但它的整体性能更差,我正在尝试复制使用后一个参数的论文。
我也对 pytorch 进行了同样的尝试,并得到了非常相似的结果。Colab for pytorch code两者的结果都可以在 github 中找到。
我对此很困惑。特别是当我使用整个训练数据集并且每个客户端都有 45% 的准确率时。还有为什么要在接下来的几轮比赛中取得好成绩?第一轮和其他轮之间有什么变化?每次客户端之间都有相同的初始化、相同的损失函数和具有相同参数的相同优化器。唯一改变的是轮次之间的实际初始化。
那么是否有一个特殊的初始化可以解决这个第一轮问题或者我错过了什么?
编辑:
当每个客户端使用整个 cifar10 训练集,使用 dataset.repeat 重复数据时。
在这里引起我注意的是这里的客户端准确性实际上与数据集不重复时客户端的第二轮(第一轮)准确性非常相似(以前的结果)。所以尽管服务器有 10% 的准确率,但对下一轮的结果影响不大。
这就是它与简单 cnn 一起工作的方式(在 github 的 main.py 中定义)
正如我们所看到的,当使用简单的 cnn 时,服务器精度优于最佳客户端精度,并且绝对优于平均水平,从第一轮开始。我试图理解为什么 resnet 无法做到这一点并且无论输入如何都做出相同的预测。在第一轮之后,预测看起来像
他们都返回第三个标签。
tensorflow-federated - TFF 是否支持跨不同设备和云的部署?
我想以某种方式部署 TFF,其中我在云中的 VM 上有一个中央(聚合)服务器和两个带有节点的不同 VM,用于训练模型。TFF 可以吗?它是否具有通过 Internet 等进行通信所需的协议,还是更像是带有 FL 算法的 Tensorflow,可以与提供架构的不同框架一起使用?
谢谢
python - 如何更改客户端发送到服务器 Tensorflow Federated 的更新
我试图以 simple_fedavg 为例来了解 Tensorflow Federated 的工作原理。
例如,我仍然不明白如何更改客户端发送到服务器的内容。
我不想发送更新的所有权重,我想发送这样形成的列表:
test_stc.stc_compression(test[index], sparsification_rate)
返回 5 个值:negatives, positives, average, original_shape, new_shape
,然后我想在运行之前访问服务器端的这些信息, 以round_model_delta = tff.federated_mean(client_outputs.weights_delta, weight=weight_denom)
创建我将用于tff.federated_mean
.
因此,基本上,我想更改client_update
为发送我创建的列表而不是所有权重,然后在服务器上使用客户端发送的信息创建自定义权重列表。只有在创建新的自定义重量列表后,我才希望服务器更新模型。
我实际上试图更改return ClientOutput(test, client_weight, loss_sum / client_weight)
,client_update
但后来我不知道如何访问test
服务器上的变量以及我需要在哪个过程/函数中进行访问。
我希望我说得足够清楚,因为我的主要语言不是英语。
neural-network - Intel OpenFL - RuntimeError:mat1 和 mat2 形状不能相乘(128x512 和 2048x4096)
我正在尝试在英特尔的 FL 新框架英特尔 OpenFL 上运行我的笔记本(在 google colab 或其他类似平台上运行良好)。我正在使用 MNIST 进行这种转换:
这是我的网:
但我有这个错误:
但是,完全相同的网络在 Google Colab 上运行良好。可能我错过了一些关于 OpenFL 的东西。
tensorflow - Tensorflow Federated 中的本地模型性能
我正在通过 tensorflow-federated 实施联合学习。本教程和所有其他可用材料在每一轮通信之后比较了联合(全局)模型的准确性。有没有一种方法可以计算每个本地模型的准确性以与联合(全局)模型进行比较。
摘要:客户端总数:15 每轮通信:本地与联合模型性能
参考:
federated-learning - NameError:名称'RemoteDataset'未在pysyft中定义
我安装了所有需要的软件包版本,即,torch 1.8.1+cu102 和 syft 0.5.0
但我得到这个错误 torch version: 1.8.1+cu102 syft version: 0.5.0 project_path: C:\Users\a\SL Traceback (last last 最近调用): File "a.py", line 59, in train_rds = RemoteDataset(path='train_dataset.pt', data_type="torch_tensor") NameError: name 'RemoteDataset' is not defined
python - ModuleNotFoundError:没有名为“syft.frameworks”的模块
我正在尝试研究这个联邦学习的例子。 https://towardsdatascience.com/federated-learning-3097547f8ca3 我已经安装了 PySyft 包,但我收到了这个错误。
tensorflow - 在多台机器上运行 TensorFlow Federated
我正在尝试创建一个包含 5 个节点(EC2 实例)的小型训练网络,该网络可以参与 TFF 训练轮以联合训练分类器。但是,无论编排实际上是否可行,我都会收到混合信号,或者我们必须坚持使用模拟。例如,如何创建自己的联合数据集并使用 TensorflowFederated 在多个设备上进行学习?声明这个模拟是唯一的。
但是,TFF 文档在多台机器上使用 TFF 进行高性能模拟(即将推出)1,这是否仍在进行中?任何想法如何去创建这样的设置?
python - 从 Sherpa.ai 导入并安装 shfl
我正在尝试在 colaboratory 中运行下面的代码,但我看到了这个错误!
https://developers.sherpa.ai/privacy-technology/ 代码:
'''
当我尝试安装 shfl 时,我看到此错误:错误:找不到满足 shfl 要求的版本(来自版本:无)错误:找不到 shfl 的匹配分发
tensorflow - TFF:使用预训练网络进行微调:测试精度在所有回合后仍然保持不变
我想用联邦学习微调预训练模型,所以我这样做:
这是训练循环:
问题是测试精度仍然保持不变,并且始终没有增加:
我想了解原因,如果有其他方法可以做到这一点?知道我的数据集是一个具有 3 类的图像数据集。