Managing Sources of Randomness When Training Deep Neural Networks