This is the official implementation of the ICML2024 paper "Recovering Labels from Local Updates in Federated Learning".
This code is implemented in Pytorch and Cuda. We ran all experiments in the virtual environment created by Conda. For installing the virtual environment:
conda create -n RLU python=3.8
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
- Create directory
mkdir data
and subdirectorymkdir data/data_partitions
- SVHN/CIFAR10/CIFAR100: should automatically be downloaded
- TinyImageNet: download dataset from http://cs231n.stanford.edu/tiny-imagenet-200.zip.
After unzipping, place them in data/
directory
option.py
: this file contains configuartions for all schemes.DataSampling.py
: this file is relevant to data partions for federated learningmodels.py
: this file define models for different experiments. Please change the activation functions if needed.utils.py
: general utilizationllg.py
: this is adapted from the attack scheme LLG- ./client: for each method, we defined adaptive client objects. We currently only release FedAvg and FedProx. FedDyn and Scaffold will be soon.
./client/client_utils.py
: utilization for the attacking schemes
python main.py --scheme iRLG --local_epoch 10 --dataset SVHN --momentum 0.0 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme RLU --local_epoch 10 --dataset SVHN --momentum 0.0 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme LLGp --local_epoch 10 --dataset SVHN --momentum 0.0 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme ZLGp --local_epoch 10 --dataset SVHN --momentum 0.0 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme iRLG --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme RLU --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme LLGp --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme ZLGp --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme iRLG --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme RLU --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme LLGp --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme ZLGp --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme iRLG --local_epoch 10 --dataset SVHN --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme RLU --local_epoch 10 --dataset SVHN --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme LLGp --local_epoch 10 --dataset SVHN --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme ZLGp --local_epoch 10 --dataset SVHN --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 32 --model lenet5 --hidden 400
python main.py --scheme iRLG --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme RLU --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme LLGp --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme ZLGp --local_epoch 10 --dataset CIFAR10 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.5 --batch_size 64 --model vgg16 --hidden 512
python main.py --scheme iRLG --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme RLU --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme LLGp --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
python main.py --scheme ZLGp --local_epoch 10 --dataset CIFAR100 --n_classes 100 --momentum 0.0 --fl_scheme fedprox --mu 0.5 --alpha 0.1 --batch_size 256 --model vgg16 --hidden 512
Please cite our paper, if you happen to use this code:
@inproceedings{
chen2024recovering,
title={Recovering Labels from Local Updates in Federated Learning},
author={Huancheng Chen and Haris Vikalo},
booktitle={Forty-first International Conference on Machine Learning},
year={2024},
url={https://openreview.net/forum?id=E41gvBG4s6}
}