         self.epsilon = epsilon
     }
 
+    /// Creates a layer normalization layer.
+    ///
+    /// - Parameters:
+    ///   - featureCount: The number of features.
+    ///   - axis: The axis that should be normalized.
+    ///   - epsilon: The small scalar added to variance.
     public init(featureCount: Int,
                 axis: Int,
                 epsilon: Tensor<Scalar> = Tensor(0.001)) {

        )
    }

    @differentiable
    public func applied(to input: Tensor<Scalar>, in _: Context) -> Tensor<Scalar> {
        let mean = input.mean(alongAxes: axis)

    /// activation function. The weight matrix is created with shape `[inputSize, outputSize]` and
    /// is initialized using Glorot uniform initialization with the specified seed. The bias vector
    /// is created with shape `[outputSize]` and is initialized with zeros.
    ///
    /// - Parameters:
    ///   - inputSize: The dimensionality of the input space.
    ///   - outputSize: The dimensionality of the output space.
    ///   - activation: The activation function to use. The default value is `identity(_:)`.
    ///   - seed: The random seed for initialization. The default value is random.
    init(
        inputSize: Int,
        outputSize: Int,
