Tutorials and implementations for Self-Normalizing Networks (SNNs) as suggested by Klambauer et al. (arXiv pre-print).
The repository contains TensorFlow/Keras scripts and PyTorch notebooks for demonstrating the main SNN recipe:
- SELU activations
- LeCun normal initialization
- AlphaDropout when dropout is used
The current examples use TensorFlow 2.x/Keras and PyTorch. Create the Conda environment from the root environment file:
conda env create -f environment.yml
conda activate snnThe environment is intended for current TensorFlow and PyTorch versions. On
Linux/NVIDIA systems, TensorFlow GPU dependencies are installed via the
tensorflow[and-cuda] pip extra.
Keras provides SELU, LeCun normal initialization, and AlphaDropout:
PyTorch provides SELU and AlphaDropout:
For SELU networks, initialize linear and convolutional layers with:
torch.nn.init.kaiming_normal_(weight, mode="fan_in", nonlinearity="linear")This corresponds to LeCun normal initialization because fan_in is used with a
gain of 1.
- Multilayer Perceptron on MNIST (python script)
- Convolutional Neural Network on MNIST (python script)
- Convolutional Neural Network on CIFAR10 (python script)
- Multilayer Perceptron on MNIST (notebook)
- Convolutional Neural Network on MNIST (notebook)
- Convolutional Neural Network on CIFAR10 (notebook)
Notebooks and code to produce Figure 1 are provided in figure1. This material builds on top of the biutils package.
Mathematica notebooks for calculations and numeric checks of the theorems are provided here: