常见用于联邦学习的数据集【FL】【Datasets】

数据集

在联邦学习中,模型训练的数据集通常分布在多个客户端设备上。以下是一些常用于联邦学习模型训练的数据集:

CIFAR-10/CIFAR-100:

CIFAR-10CIFAR-100 是两个广泛使用的图像数据集,常用于图像分类和计算机视觉任务。它们由加拿大多伦多大学的Alex Krizhevsky等人创建,旨在提供一个相对简单但具有挑战性的图像分类任务基准。

CIFAR-10

  • 内容:CIFAR-10包含60,000张32x32像素的彩色图像,分为10个类别,每个类别有6,000张图像。

  • 数据分布

    • 训练集:50,000张图像(每个类别5,000张)
    • 测试集:10,000张图像(每个类别1,000张)

CIFAR-100

  • 内容:CIFAR-100与CIFAR-10类似,也包含60,000张32x32像素的彩色图像,但它分为100个类别,每个类别有600张图像。
  • 数据分布
    • 训练集:50,000张图像(每个类别500张)
    • 测试集:10,000张图像(每个类别100张)

特点

  1. 图像尺寸:两者的数据集都包含32x32像素的图像。这种较小的尺寸使得数据集适合快速实验和基准测试。
  2. 类别数量:CIFAR-10只有10个类别,适用于较简单的分类任务;而CIFAR-100有100个类别,提供了更高的挑战性。
  3. 用途:CIFAR-10和CIFAR-100常用于训练和评估图像分类模型,特别是在深度学习和计算机视觉领域。它们也是许多算法的基准数据集,用于比较不同模型的性能。
    你可以从以下链接下载 CIFAR-10 和 CIFAR-100 数据集:

CIFAR-10 :

下载好解压后显示如下:
在这里插入图片描述
在 CIFAR 数据集中,解压后的 batches.meta 文件用于存储数据集中类别的信息。具体来说,batches.meta 文件包含以下内容:

  1. 标签名称:文件中包含了数据集中所有类别的名称。这些名称对应于图像数据中的标签,帮助将模型预测的数字标签与实际类别名称进行匹配。

  2. 类别索引:文件还包含了每个类别的索引,这些索引与训练数据和测试数据中的标签值相对应。每个图像的标签是一个整数值,表示该图像的类别,batches.meta 文件帮助将这些整数标签转换为易于理解的类别名称。

在 CIFAR-10 中,batches.meta 文件包含10个类别名称,例如“飞机”、“汽车”等;而在 CIFAR-100 中,它包含100个类别的名称。

示例内容

batches.meta

batches.meta 文件的内容通常是一个 Python 的 pickle 格式文件,你可以用 Python 读取它,代码示例如下:

import pickle

# 读取 batches.meta 文件
with open('batches.meta', 'rb') as f:
    meta = pickle.load(f, encoding='latin1')

# 输出类别名称
print(meta['label_names'])

在 CIFAR-10 中,meta['label_names'] 将输出:

['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

在这里插入图片描述

在 CIFAR-100 中,meta['label_names'] 将输出100个类别名称,如:

['apple', 'aquarium_fish', 'baby', 'banana', 'beetle', ...]
data_batch_1data_batch_5
  • 内容:这些文件包含训练集的数据。每个文件存储了一部分训练数据,共5个批次(batches),每个批次包含了 10,000 张 32x32 像素的彩色图像。每张图像都有一个对应的标签,表示它属于哪个类别。在这里插入图片描述

  • 结构

    • 数据:这些文件的每个记录包括图像数据和标签。图像数据存储为 32x32 的像素数组,每个像素有三个值(RGB)。
    • 标签:每张图像都有一个整数标签,指示它的类别。标签范围是 0 到 9,对于 CIFAR-10 数据集。
test_batch
  • 内容test_batch 文件包含了测试集的数据。这些数据与训练集的数据类似,但用于模型的评估。测试集包含 10,000 张图像,每张图像也有一个标签。
    在这里插入图片描述

  • 结构:和训练集的数据批次文件类似,test_batch 文件存储图像数据和标签。数据的存储格式与 data_batch_1data_batch_5 是相同的。

  • 文件格式:你可以用类似的方式读取 test_batch 文件,代码示例如下:

图片转换Python脚本:

下面我将教大家如何将图片转换为.jpg格式:

from PIL import Image
import numpy as np
import pickle
import os

# 解压缩,返回解压后的字典
def unpickle(file):
    with open(file, 'rb') as fo:
        data_dict = pickle.load(fo, encoding='latin1')
    return data_dict

# 保存图像
def save_image(img_array, filename):
    img = Image.fromarray(img_array)
    img.save(filename)

# 确保输出目录存在
if not os.path.exists('train'):
    os.makedirs('train')
if not os.path.exists('test'):
    os.makedirs('test')

# 生成训练集图片
for j in range(1, 6):
    dataName = f"data_batch_{
     j}"  # 读取当前目录下的data_batch文件
    Xtr = unpickle(dataName)
    print(dataName + " is loading...")

    for i in range(0, 10000):
        img = np.reshape(Xtr['data'][i], (3, 32, 32))
        img = img.transpose(1, 2, 0).astype(np.uint8)  # 转换为uint8类型
        picName = f'train/{
     Xtr["labels"][i]}_{
     i + (j - 1) * 10000}.jpg'
        save_image(img, picName)
    print(dataName + " loaded.")

print("test_batch is loading...")

# 生成测试集图片
testXtr = unpickle("test_batch")
for i in range(0, 10000):
    img = np.reshape(testXtr['data']
### 使用Python实现联邦学习的方法 #### 方法概述 联邦学习是一种分布式机器学习方法,允许多个参与者共同训练模型而不共享数据。这种方法特别适用于保护隐私和安全的数据环境。PySyft 是一个基于 Python 的库,专注于隐私保护的机器学习技术,支持联邦学习的应用开发[^1]。 对于 TensorFlow 用户来说,TensorFlow Federated(TFF)提供了一套完整的 API 和工具链来简化联邦学习算法的设计与部署过程。通过 TFF 可以轻松构建复杂的联邦学习架构并加速研究进展[^2]。 另一种流行的框架是 PySyft,它不仅限于理论介绍还包含了实际操作指南,比如利用鸢尾花数据集作为案例展示了整个流程中的各个细节部分[^3]。 最后提到的是 FedAvg-PyTorch 实现方案,这是一种经典的联邦平均算法的具体编码方式,并且项目源码公开托管在 GitHub 上供有兴趣者参考学习[^4]。 #### 示例代码展示 以下是使用 PySyft 进行简单线性回归任务下的联邦学习示例: ```python import torch from syft.frameworks.torch.fl import utils as fl_utils from torchvision.datasets.mnist import MNIST from syft.workers.websocket_client import WebsocketClientWorker # 初始化客户端工作节点 client_worker = WebsocketClientWorker(host="localhost", hook=hook) # 加载MNIST手写数字识别数据集 train_dataset = MNIST(root='./data', train=True, download=True, transform=torchvision.transforms.ToTensor()) # 将本地数据分发给远程工作者们 federated_train_loader = fl_utils.load_data_to_workers( dataset=train_dataset, workers=[client_worker], batch_size=64 ) # 定义简单的神经网络结构 class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = torch.nn.Linear(784, 50) self.fc2 = torch.nn.Linear(50, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = self.fc2(x) return F.log_softmax(x, dim=-1) model = Net() for epoch in range(epochs): model.train() # 开始一轮迭代更新参数 for batch_idx, (data, target) in enumerate(federated_train_loader): data.send(client_worker).get() # 发送至远端计算再取回结果 optimizer.zero_grad() output = model(data.view(-1, 784)) # 调整输入维度适应全连接层 loss = F.nll_loss(output, target) loss.backward() optimizer.step() ``` 上述代码片段主要介绍了如何设置服务器与客户机之间的通信机制、准备所需的数据资源以及定义待优化的目标函数等内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternity_GQM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值