A review of uncertainty quantification in deep learning: Techniques, applications and challenges