PFL-Non-IID实战案例:从MNIST到Cifar100的完整实验流程

张开发
2026/5/6 22:23:30 15 分钟阅读

分享文章

PFL-Non-IID实战案例:从MNIST到Cifar100的完整实验流程
PFL-Non-IID实战案例从MNIST到Cifar100的完整实验流程【免费下载链接】PFLlibMaster Federated Learning in 2 Hours—Run It on Your PC!项目地址: https://gitcode.com/gh_mirrors/pf/PFL-Non-IIDPFL-Non-IID是一个专注于非独立同分布Non-IID场景下联邦学习研究的开源项目提供了从数据生成到模型训练的全流程解决方案。本指南将带你快速掌握如何使用该框架完成从MNIST到Cifar100的非独立同分布联邦学习实验即使是联邦学习新手也能在2小时内上手操作。 认识PFL-Non-IID框架结构PFL-Non-IID采用模块化设计主要包含数据集生成模块和联邦学习系统模块。下图展示了框架的核心架构包括数据流向和核心组件交互从架构图中可以看到框架主要分为两大模块数据集模块通过dataset/generate_*.py系列脚本生成非独立同分布的客户端本地数据联邦学习系统包含客户端system/flcore/clients/、服务器system/flcore/servers/和模型system/flcore/trainmodel/三大组件 环境准备与项目部署1. 快速克隆项目首先通过以下命令克隆项目到本地git clone https://gitcode.com/gh_mirrors/pf/PFL-Non-IID cd PFL-Non-IID2. 安装依赖环境项目提供了conda环境配置文件使用以下命令快速搭建运行环境conda env create -f env_cuda_latest.yaml conda activate pfl-noniid 数据集生成模块详解PFL-Non-IID支持20种主流数据集的非独立同分布生成所有生成脚本都位于dataset/目录下命名格式为generate_数据集名称.py。目前支持的主要数据集包括图像数据集MNIST、Cifar10、Cifar100、FashionMNIST等文本数据集Shakespeare、AGNews、SogouNews等传感器数据集HAR、PAMAP2等核心参数说明所有数据集生成脚本都支持以下核心参数niid是否生成非独立同分布数据noniid表示非独立同分布其他值表示独立同分布balance是否平衡各客户端数据量balance表示平衡其他值表示不平衡partition数据划分策略如None表示默认划分 MNIST非独立同分布数据生成实战1. 运行数据生成脚本MNIST数据集生成脚本位于dataset/generate_MNIST.py默认生成20个客户端的非独立同分布数据。运行以下命令生成数据cd dataset python generate_MNIST.py noniid balance None2. 生成结果说明脚本执行完成后会在dataset/MNIST/目录下生成以下内容rawdata/原始MNIST数据集train/20个客户端的训练数据0.npz到19.npztest/20个客户端的测试数据0.npz到19.npzconfig.json数据集配置信息3. 关键代码解析generate_MNIST.py的核心函数是generate_dataset它实现了以下功能下载并加载MNIST原始数据通过separate_data函数实现非独立同分布划分默认每个客户端分配2个类别将划分后的数据保存为客户端本地文件关键代码片段# 非独立同分布数据划分 X, y, statistic separate_data((dataset_image, dataset_label), num_clients, num_classes, niid, balance, partition, class_per_client2) # 分割训练集和测试集 train_data, test_data split_data(X, y) # 保存数据 save_file(config_path, train_path, test_path, train_data, test_data, num_clients, num_classes, statistic, niid, balance, partition) Cifar100非独立同分布数据生成实战1. 运行数据生成脚本Cifar100数据集生成脚本位于dataset/generate_Cifar100.py运行以下命令生成数据python generate_Cifar100.py noniid balance None2. 与MNIST生成的差异Cifar100生成脚本与MNIST的主要区别在于每个客户端默认分配10个类别MNIST为2个处理彩色图像数据3通道数据归一化参数不同关键差异代码# Cifar100每个客户端分配10个类别 X, y, statistic separate_data((dataset_image, dataset_label), num_clients, num_classes, niid, balance, partition, class_per_client10) # Cifar100的图像归一化参数 transform transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])‍♂️ 启动联邦学习实验1. 配置实验参数实验主程序位于system/main.py通过命令行参数配置实验--dataset指定数据集如mnist、cifar100--algorithm指定联邦学习算法如fedavg、scaffold等--num_rounds指定训练轮数--num_clients指定参与客户端数量2. 运行MNIST实验以FedAvg算法为例运行MNIST联邦学习实验cd ../system python main.py --dataset mnist --algorithm fedavg --num_rounds 100 --num_clients 203. 运行Cifar100实验运行Cifar100联邦学习实验python main.py --dataset cifar100 --algorithm fedavg --num_rounds 200 --num_clients 20 实验结果分析实验结果会自动保存在system/results/目录下包括训练日志准确率曲线损失曲线你可以通过system/utils/result_utils.py中的工具函数对结果进行分析和可视化。 自定义扩展指南1. 添加新数据集要添加新数据集只需在dataset/目录下创建generate_新数据集.py参考现有脚本实现generate_dataset函数。2. 实现新算法要实现新的联邦学习算法需在system/flcore/clients/目录下创建客户端实现如clientnewalg.py在system/flcore/servers/目录下创建服务器实现如servernewalg.py继承clientbase.py和serverbase.py基础类并实现核心方法 总结通过本指南你已经掌握了PFL-Non-IID框架的核心功能和使用方法包括从MNIST到Cifar100的非独立同分布数据生成和联邦学习实验流程。该框架不仅支持多种数据集和算法还提供了灵活的扩展机制非常适合联邦学习的入门学习和研究实验。现在就动手尝试吧无论是修改数据分布策略还是实现新的联邦学习算法PFL-Non-IID都能为你提供稳定可靠的实验平台。【免费下载链接】PFLlibMaster Federated Learning in 2 Hours—Run It on Your PC!项目地址: https://gitcode.com/gh_mirrors/pf/PFL-Non-IID创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章