Author: Haley So (haleyso@stanford.edu), adapted from IR-Net


To run: 
sample command
CUDA_VISIBLE_DEVICES=7 python trainSimple.py --arch blitzSTEW1A1 --save-dir /path/to/save/models --method ste
must include the architecture or else the default will run.
----------------------------------------------------------Contents:-----------------------------------------------------------------------------------------

- main.py
	the original training file from IR-net. Any models in the vgg.py (original or the ones I added for experiment 3) use this training file
- trainSimple.py
	this training file is for the blitz models found in blitz.py. The viable options are listed near the top of both this file and the blitz.py file.
- evaluate.py
	simply evaluates a model. No training is done here

-Models:
	--blitz.py
		- houses the models. A few naming conventions. 
			Either model starts with blitz (using the base model) or bnn(using a modified model) or vgg(using the irnet architecture)
			Then it is followed by W1A1 or W1 meaning weights and activations are binary or only weights are binary respectively
			The gradient estimator is in the name
	--vgg.py
		- model from IRNet along with different variants I created. Similar naming convention is used for the model names.

-Modules:
	--birealnetModules.py
		birealnet's estimator
	--gumbel_quant.py
		using gumbel softmax. Code adapted from Suyeon Choi. There are tau_min, tau_max, c_scaling, and r parameters that define how it changes over time. 
		For these experiments, I found a good base is tau_min 0.1 tau_max 6 c_scale 200
		This is quite finicky though.
	--ir_1w1a.py
		The irnet's estimator
	--straightThrough.py
		The straight through estimator
	--gradientEstimators.py
		more estimators I implemented

-Tools:
	--useful_tools.py
		just some helpful utils

-Training_parameters:
	--losses.py
		if you want to add different losses, you can add them here.



note:
--method only really matters for gumbel softmax 
-- when set to gumbel softmax, we use the tau and other parameters mentioned above. 
when set to irnet, the original decay of the tanh estimator from IRnet is used. Just set it to something else if not training those versions.



