 /// need to be toggled or threaded through in more than one place.
 public class LearningPhaseIndicator {
     public var training: Bool = true
+    public init() { }
 }
 
 /// A mutable, shareable reference to a tensor

}

public extension Tensor where Scalar : BinaryFloatingPoint,
                       Scalar.RawSignificand : FixedWidthInteger {
    @differentiable(wrt: (self) where Scalar : Differentiable)
    func droppedOut(withProbability probability: Double) -> Tensor {
        let noise = Tensor(randomUniform: shape)
        let keepMask = noise .>= Scalar(probability)
        let keepProbability = Scalar(1.0 - probability)

    }

    @differentiable(wrt: (self, input))
    private func applyTraining(to input: Tensor<Scalar>) -> Tensor<Scalar> {
        return input.droppingOut(probability: probability)
    }

    @differentiable(wrt: (self, input))
    private func applyInference(to input: Tensor<Scalar>) -> Tensor<Scalar> {
        return input
    }

