class_docstr: Deep Video Compression encoder module.
  
  Args:
      in_channels: Number of channels in image space.
      out_channels: Number of channels to output from encoder.
      filter_channels: Number of channels for intermediate layers.
      kernel_size: Size of convolution kernels.
      stride: Stride of convolutions.
      num_conv_layers: Number of convolution layers.
      use_gdn: Whether to use Generalized Divisive Normalization or
          BatchNorm.
class_docstr_tok: ["Deep","Video","Compression","encoder","module",".","Args",":","in_channels",":","Number","of","channels","in","image","space",".","out_channels",":","Number","of","channels","to","output","from","encoder",".","filter_channels",":","Number","of","channels","for","intermediate","layers",".","kernel_size",":","Size","of","convolution","kernels",".","stride",":","Stride","of","convolutions",".","num_conv_layers",":","Number","of","convolution","layers",".","use_gdn",":","Whether","to","use","Generalized","Divisive","Normalization","or","BatchNorm","."]
code: def forward(self, image: Tensor) -> Tuple[Tensor, List[torch.Size]]:
      sizes = []
      for layer in self.layers:
          # log the sizes so that we can recover them with strides != 1
          if isinstance(layer, nn.Conv2d):
              sizes.append(image.shape)
  
          image = layer(image)
  
      return image, sizes
  
imports: from typing import Any, List, NamedTuple, Optional, Sequence, Tuple
  import torch
  import torch.nn.functional
  from compressai.entropy_models import EntropyBottleneck
  from torch import Tensor, nn
  import neuralcompression.functional
  from neuralcompression.layers import SimplifiedGDN, SimplifiedInverseGDN
label_desc: Use image node_id 2 for calling the DVCCompressionEncoder obj's underlying member method code with example usage: obj.forward(image) and returns: image,  sizes