Unsupervised and Semi-supervised Learning with Categorical Generative Adversarial Networks