Cross-Layer Optimization for Fault-Tolerant Deep Learning