# IDNNs ## Description IDNNs is a python library that implements training and calculating of information in deep neural networks [\[Shwartz-Ziv & Tishby, 2017\]](#IDNNs) in TensorFlow. The library allows you to investigate how networks look on the information plane and how it changes during the learning. ## Prerequisites - tensorflow r1.0 or higher version - numpy 1.11.0 - matplotlib 2.0.2 - multiprocessing - joblib ## Usage All the code is under the `idnns/` directory. For training a network and calculate the MI and the gradients of it run the an example in [main.py](main.py). Off course you can also run only specific methods for running only the training procedure/calculating the MI. This file has command-line arguments as follow - - `start_samples` - The number of the first sample for calculate the information - `batch_size` - The size of the batch - `learning_rate` - The learning rate of the network - `num_repeat` - The number of times to run the network - `num_epochs` - maximum number of epochs for training - `net_arch` - The architecture of the networks - `per_data` - The percent of the training data - `name` - The name for saving the results - `data_name` - The dataset name - `num_samples` - The max number of indexes for calculate the information - `save_ws` - True if we want to save the outputs of the network - `calc_information` - 1 if we want to calculate the MI of the network - `save_grads` - True if we want to save the gradients of the network - `run_in_parallel` - True if we want to run all the networks in parallel mode - `num_of_bins` - The number of bins that we divide the neurons' output - `activation_function` - The activation function of the model 0 for thnh 1 for RelU' - `interval_accuracy_display` - The interval for display accuracy - `interval_information_display` - The interval for display the information calculation - `cov_net` - True if we want covnet - `rand_labels` - True if we want to set random labels - `data_dir` - The directory for finding the data The results are save under the folder jobs. Each run create a directory with a name that contains the run properties. In this directory there are the data.pickle file with the data of run and python file that is a copy of the file that create this run. The data is under the data directory. For plotting the results we have the file [plot_figures.py](idnns/plot/plot_figures.py). This file contains methods for plotting diffrent aspects of the data (the information plane, the gradients,the norms, etc). ## References 1. Ravid. Shwartz-Ziv, Naftali Tishby, [Opening the Black Box of Deep Neural Networks via Information](https://arxiv.org/abs/1703.00810), 2017, Arxiv.