Learning by Association – A versatile semi-supervised training method for neural networks