Code accompanying the ICML 2025 paper On the Importance of Gaussianizing Representations.
Python 3.8 or higher.
Specific module and version requirements are listed in requirements.txt. After cloning the repository, cd to the repo directory, and enter pip install -r requirements.txt.
As a very basic example of usage, to train and evaluate a fully connected network with normality normalization on the MNIST classification task, enter:
python train.py
By default, all outputs are saved to folder ./runs/, and grouped by the model name of the run (which by default is the date and time the run was launched). Inspecting folder ./runs/ during/after a run, should make clear what is saved by default during the run. If you'd simply like to inspect the performance of the model during/after the run, opening the stdout file in the corresponding run's stdout folder will suffice.
To reproduce the ResNet18/CIFAR10 experimental setup, enter:
python train.py --base_config_path=./configs/model_default_configs/resnet.yaml --dataset=CIFAR10
To reproduce the ViT/SVHN experimental setup, enter:
python train.py --base_config_path=./configs/model_default_configs/vit.yaml --dataset=SVHN
In a similar manner, our experimental configurations can be reproduced using these simple command line changes, and for architectural changes, by modifying the corresponding ./params/<model_type>.txt file. See also config.py for the comprehensive list of arguments which can be passed in.
You can also simply copy our ./layers.py file into your own codebase, and import any of the layers we've implemented from there. For example, to import BatchNormalNorm2d, you would enter from layers import BatchNormalNorm2d.
Note that depending on the task, increasing the value for noise_train (the noise factor) from its default value, may lead to an increased benefit to generalization performance. For example in BatchNormalNorm2d, noise_train=0.6 may work better than the default value of noise_train=0.4. Similarly in LayerNormalNorm,noise_train=1.5 may work better than the default value of noise_train=1.0. Thus it is worth experimenting with the value for this parameter.
Executable files:
train.py: model training.
Configuration specification files:
./configs/config.py: Complete list of command-line parsable arguments.
./configs/default_config.yaml: Default config values; arguments provided in the command line override the default values. Each model type also has its own default configuration file, located at ./configs/model_default_configs/<model_type>.yaml.
Architecture Specification files:
./params/resnet.txt: ResNet architectures can be specified here. The order of arguments is: {block type, [layers_1, layers_2, layers_3, layers_4], width_per_group}. The default values in ./params/resnet.txt correspond to ResNet18.
./params/vit.txt: Vision Transformer architectures can be specified here. The order of arguments is: {[patch_size, num_layers, num_heads], [hidden_dim, mlp_dim], [dropout, attention_dropout], image_size}.
./params/wideresnet.txt: WideResNet architectures can be specified here. The order of arguments is: {depth, widen_factor, dropout}. The default values in ./params/wideresnet.txt correspond to WideResNet28-2.
./params/fc.txt: Fully Connected network architectures can be specified here. The order of arguments is: {num_units, num_units, ...}, so that each entry corresponds to the number of units for each successive layer. The default values in ./params/fc.txt correspond to a fully connected network with two layers, each with 784 units.
@inproceedings{
eftekhari2025on,
title={On the Importance of Gaussianizing Representations},
author={Daniel Eftekhari and Vardan Papyan},
booktitle={Forty-second International Conference on Machine Learning},
year={2025},
url={https://openreview.net/forum?id=z2rrB4S3hg}
}
Correspondences to:
Daniel Eftekhari
[email protected]
This project is licensed under the MIT License - see the LICENSE file for details.