         }
     }
 
-    public func _vjpApplied(to input: Tensor<Scalar>) ->
+    @usableFromInline
+    func _vjpApplied(to input: Tensor<Scalar>) ->
         (Tensor<Scalar>, (Tensor<Scalar>) ->
             (Dropout<Scalar>.CotangentVector, Tensor<Scalar>)) {
         if learningPhaseIndicator.training {

        let upSampled = upSampling.reshaped(toShape: upSampledShape)
        return upSampled
    }

}

    }
}

/// A mutable, shareable flag that denotes training vs. inference.
///
/// In typical uses, every layer in a model that has behavior which differs
/// between training and inference shares an instance of ModeRef so it doesn't
/// need to be toggled or threaded through in more than one place.
public final class LearningPhaseIndicator {
    public var training: Bool = true
    public init() {}
}

/// A mutable, shareable reference to a tensor
public final class Parameter<T: TensorFlowScalar> {
    public var value: Tensor<T>
    public init(_ value: Tensor<T>) {
        self.value = value
