This is the code for the paper Learnable Statistical Moments Pooling for Automatic Modulation Classification, accepted at ICASSP 2024. This work enables the statistical moment order (e.g., 1=mean, 2=variance, 3=skewness, 4=kurtosis) to be learned from data. This is typically a non-differentiable process. To overcome this limitation, we introduce a continuous relaxation of the moment order. This allows us to learn the moment order from data using gradient descent. We show that this approach outperforms fixed moment order pooling and other learnable moment order pooling methods.
| Type | Statistics | Shared Weights | Test Accuracy (%) | Peak Accuracy (%) | # Params (K) |
|---|---|---|---|---|---|
| Raw | [μ] | ✔ | 62.93 | 97.45 | 200.72 |
| [U] | ✔ | 63.15 | 97.82 | 200.721 | |
| [U] | — | 62.94 | 97.65 | 200.828 | |
| Central | [μ, σ²] | ✔ | 63.54 | 98.80 | 214.544 |
| [U, Σ] | ✔ | 63.67 | 98.77 | 214.548 | |
| [U, Σ] | — | 63.49 | 98.67 | 214.762 | |
| [U, σ²] | ✔ | 63.68 | 98.75 | 214.545 | |
| [U, σ²] | — | 63.51 | 98.62 | 214.652 | |
| Std. | [μ, σ², γ] | ✔ | 62.96 | 98.84 | 228.368 |
| [μ, σ², γ, κ] | ✔ | 63.30 | 98.79 | 242.192 | |
| [U, Σ, Γ] | ✔ | 63.35 | 98.72 | 228.373 | |
| [U, Σ, Γ] | — | 62.76 | 97.68 | 228.694 | |
| [U, σ², γ, κ] | ✔ | 63.00 | 98.65 | 242.193 | |
| [U, σ², γ, κ] | — | 62.93 | 98.60 | 242.3 |
*Note: Capital letters denote learnable moments, while lowercase letters denote fixed moments.
To install this code, run the following in your environment:
pip install git+https://github.com/caharper/learnable_moments_poolingTo install this code manually, clone this repo and run the following in your environment:
git clone https://github.com/caharper/learnable_moments_pooling
cd learnable_moments_pooling
python setup.py installWe provide our experimental configuration for the RadioML 2018.01A dataset (download here) under the ./experiments directory. To process the data into TFRecord format for optimal performance, we make use of the smart-tfrecord-writer package. To convert the dataset into this format, follow the guide here.
Once the dataset is configured, we make use of the bocas package to run our experiments. To run the experiments, run the following in your environment:
cd experiments/modulation
python -m bocas.launch run.py --task run.py --config configs/sweep-learned.pyMake sure to pass the appropriate configuration file. Our configurations can be found under the ./experiments/modulation/configs/ directory.
If you find this code useful, please cite our paper:
@inproceedings{harper2024icassp,
title={Learnable Statistical Moments Pooling for Automatic Modulation Classification},
author={Harper, Clayton and Thornton, Mitchell A and Larson, Eric C},
booktitle={ICASSP 2024-2024 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
year={2024},
organization={IEEE}
}