     public init(
         filter: Tensor<Scalar>,
         bias: Tensor<Scalar>,
-        activation: @escaping Activation,
-        strides: (Int, Int),
-        padding: Padding
+        activation: @escaping Activation = identity,
+        strides: (Int, Int) = (1, 1),
+        padding: Padding = .valid
     ) {
         self.filter = filter
         self.bias = bias

    public typealias Activation = @differentiable (Tensor<Scalar>) -> Tensor<Scalar>
    /// The element-wise activation function.
    @noDerivative public let activation: Activation
    /// The stride of the sliding window for temporal dimension.
    @noDerivative public let stride: Int
    /// The padding algorithm for convolution.
    @noDerivative public let padding: Padding
    /// The dilation factor for temporal dimension.
    @noDerivative public let dilation: Int
    
    /// Creates a `Conv1D` layer with the specified filter, bias, activation function, stride, and

    /// - Returns: The output.
    @differentiable
    public func callAsFunction(_ input: Tensor<Scalar>) -> Tensor<Scalar> {
        return activation(conv3D(
            input,
            filter: filter,
            strides: (1, strides.0, strides.1, strides.2, 1),
            padding: padding) + bias)
    }
}

