当前位置: 首页 > news >正文

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-IID

PFL-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-IID

2. 安装依赖环境

项目提供了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 None

2. 生成结果说明

脚本执行完成后,会在dataset/MNIST/目录下生成以下内容:

  • rawdata/:原始MNIST数据集
  • train/:20个客户端的训练数据(0.npz19.npz
  • test/:20个客户端的测试数据(0.npz19.npz
  • config.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_client=2) # 分割训练集和测试集 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 None

2. 与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_client=10) # 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 20

3. 运行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.pyserverbase.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),仅供参考

http://www.jsqmd.com/news/766352/

相关文章:

  • 从遥感图像到OCR:旋转框IoU计算的Python实现与性能优化小技巧
  • 第 1 章:Rust 入门基础
  • 如何轻松解密QQ聊天记录?全平台数据库解密终极指南
  • 【权威实测】Docker 27 vs Docker 26边缘容器启动耗时对比:这6项配置改动让冷启快3.8倍
  • KMS_VL_ALL_AIO:Windows与Office智能激活终极方案
  • 英派药业开启招股:拟募资9亿港元 5月13日上市 腾讯与药明康德加持
  • Unlocker 3.0:如何在普通PC上运行macOS虚拟机?
  • 告别格式焦虑:5分钟学会用Chinese-ERJ模板轻松撰写《经济研究》期刊论文
  • 2026年阿里云高效教程:OpenClaw怎么搭建及大模型API Key、Skill集成全攻略
  • 别再只会用TCRT5000循迹了!手把手教你玩转它的4种隐藏用法(附STM32代码)
  • # 第 1 章:Rust 入门基础
  • 别再乱用@Autowired注入HttpServletRequest了!聊聊Spring里Request对象的线程安全那点事
  • 为什么92%的制造企业卡在AISMM第三阶段?——来自西门子、博世、宁德时代联合验证的落地断点图谱
  • OpenCV C++ KNN模型训练避坑指南:从制作自己的手写数字数据集到保存model.xml
  • 2026年OpenClaw怎么部署?华为云简易实用2分钟安装及接入百炼APIKey步骤
  • 解决99%的截图难题:Pico处理跨域图片、字体和滚动元素的终极方案
  • Alexa Fluor 647标记的B7-H3/CD276 Fc嵌合蛋白在肿瘤免疫靶向治疗研究中的应用
  • 2026年4月比较好的电梯批发厂家推荐,伺服电梯/液压电梯/私人家用电梯/螺杆电梯/曳引背包电梯,电梯源头厂家选哪家 - 品牌推荐师
  • 在LangChain中实现思维链(CoT)推理的五种实战方法
  • 咸宁本地专业防水TOP5靠谱推荐:家里漏水不用愁,免费上门不求人。本地最新防水企业资讯:专业师傅持证上门,收费透明无隐藏收费,质保5-10年,售后有保障 - 企业资讯
  • 【VSCode 2026农业物联网开发权威指南】:零基础30天打造高兼容性IoT插件(含官方API v2.8.1适配清单)
  • 苏州本地专业防水TOP5靠谱推荐:家里漏水不用愁,免费上门不求人。本地最新防水企业资讯:专业师傅持证上门,收费透明无隐藏收费,质保5-10年,售后有保障 - 企业资讯
  • TB6600驱动器共阴共阳接法傻傻分不清?一张图搞定STM32与42步进电机的接线避坑指南
  • Docker Cheat Sheet:数据一致性保障策略终极指南
  • python: Registry Pattern
  • 观察 Taotoken 账单中心如何实现按 Token 计费与消费追溯
  • LinkSwift直链助手:免费解锁八大网盘极速下载的终极指南
  • 别再拍脑袋定权重了!用Python手把手教你实现熵权TOPSIS,搞定多指标决策难题
  • 为什么83%的MCP 2026早期部署团队在第47小时触发级联超时?——基于127个集群日志的智能调度阈值预警模型首次公开
  • 2026年广东地区的Nitronic60不锈钢厂商推荐名单 - 品牌2026