class_docstr: Positional embedding which is placed at the beginning of Transformer.
  
  Args:
      embed_dim (int): Feature dimension of the input Tensor.
      kernel_size (int): The number of frames to be use.
      groups (int): The number of groups in feature dimensions.
class_docstr_tok: ["Positional","embedding","which","is","placed","at","the","beginning","of","Transformer",".","Args",":","embed_dim","(","int",")",":","Feature","dimension","of","the","input","Tensor",".","kernel_size","(","int",")",":","The","number","of","frames","to","be","use",".","groups","(","int",")",":","The","number","of","groups","in","feature","dimensions","."]
docstr: Args:
      x (Tensor): shape ``[batch, frame, feature]``.
  
  Returns:
      Tensor: The resulting feature. Shape ``[batch, frame, feature]``.
docstr_tok: ["Args",":","x","(","Tensor",")",":","shape","``","[","batch",",","frame",",","feature","]","``",".","Returns",":","Tensor",":","The","resulting","feature",".","Shape","``","[","batch",",","frame",",","feature","]","``","."]
code: def forward(self, x):
      """
      Args:
          x (Tensor): shape ``[batch, frame, feature]``.
  
      Returns:
          Tensor: The resulting feature. Shape ``[batch, frame, feature]``.
      """
      x = x.transpose(-2, -1)
      x = self.conv(x)
      if self.num_remove > 0:
          x = x[..., : -self.num_remove]
      x = torch.nn.functional.gelu(x)
      x = x.transpose(-2, -1)
      return x
  
imports: import logging
  from typing import List, Optional, Tuple
  import torch
  from torch import nn, Tensor
  from torch.nn import Module, Parameter
  from .wavlm_attention import WavLMSelfAttention
label_desc: Use image node_id 3 for calling the ConvolutionalPositionalEmbedding obj's underlying member method code with example usage: obj.forward(x) and returns: x