This repository contains the implementation for the paper Estimation of Rate-Distortion Function for Computing with Decoder Side Information, IEEE ISIT 2024.
Please follow the instructions below to quickly check the results of the codebase.
This codebase estimates the rate-distortion function with side information from data points.
Consider a scenario featuring a 2-component White Gaussian Noise, 2-WGN
The goal of the algorithm is to estimate point(s) on the true rate distortion function
You can generate a specific scenario by explicitly setting the value of
2WGNAVG0.8rho10dim
To run the main file with the necessary arguments, you need to set the following parameters:
- GPU number: The GPU to use for computations.
- Task name: A name to identify the task.
- Side information setup: Use 'D' to indicate that side information is available at the decoder.
- Distortion metric: The distortion measure to use.
- lmbda (-s value): The Lagrangian multiplier or the slope.
- Dataset name: The name of the dataset (e.g., 2WGNAVG0.8rho10dim).
- Neural network architecture: The architecture of the neural network.
- Seed number: The random seed.
- Batch size: The batch size for training.
- Initial learning rate: The initial learning rate for the optimizer.
- Steps per epoch: The number of steps per epoch.
- Number of epochs: The total number of training epochs.
- Results path name: The directory to store results.
- Save model: Whether to save the model (True/False).
- Evaluation interval: The interval at which to evaluate the model.
- Train/Test: Specify whether to train or test the model.
Here is an example of how to run the main script with these arguments:
python main.py --gpu 0 \
--task rd_estimation \
--side_information D \
--distortion_metric MSE \
--lmbda 20.0 \
--dataset 2WGNAVG0.8rho10dim \
--model_type mlp \
--random_seed 42 \
--batch_size 100 \
--learning_rate 5e-3 \
--steps_per_epoch 100 \
--epochs 500 \
--results_path_name results \
--save True \
--evaluation_interval 2 \
--train True \
--test True
Replace the placeholder values with your specific parameters.
To visualize the results, you may use the provided Python script data/plot/2WGNAVG_plot.py
. Before running the plotting script, you should first obtain the rate-distortion estimation results by executing main.py
with various setups.
For example, to reproduce the plot shown in the paper:
you need to execute main.py for a total of 16 different setups with (
After running these commands and obtaining the results, you can use the plotting script to generate the desired plots.
python data/plot/2WGNAVG_plot.py
If you find this repository helpful, please cite our work:
@inproceedings{kim2024estimation,
title={Estimation of Rate-Distortion Function for Computing with Decoder Side Information},
author={Kim, Heasung and Kim, Hyeji and De Veciana, Gustavo},
booktitle={First 'Learn to Compress' Workshop @ ISIT 2024}
}
A part of this project is inspired by the following papers and codebases:
-
Yibo Yang and Stephan Mandt, "Towards Empirical Sandwich Bounds on the Rate-Distortion Function", ICLR 2022, https://github.com/mandt-lab/RD-sandwich
-
Lu, Zhilin, Jintao Wang, and Jian Song. "Multi-resolution CSI feedback with deep learning in massive MIMO system." ICC 2020-2020 IEEE international conference on communications (ICC). IEEE, 2020. https://github.com/Kylin9511/CRNet
-
https://github.com/keras-team/keras-io/blob/master/examples/generative/vq_vae.py Title: Vector-Quantized Variational Autoencoders Author: Sayak Paul