Training Deep Spiking Neural Network: Enabling Spike-based Learning