class_docstr: A Convolutional decoder Neural net suited for CIFAR and Autoencoder-based
  models.
  
  It can be built as follows:
  
  .. code-block::
  
          >>> from pythae.models.nn.benchmarks.cifar import Decoder_Conv_AE_CIFAR
          >>> from pythae.models import VAEConfig
          >>> model_config = VAEConfig(input_dim=(3, 32, 32), latent_dim=16)
          >>> decoder = Decoder_Conv_AE_CIFAR(model_config)
          >>> decoder
          ... Decoder_Conv_AE_CIFAR(
          ...   (layers): ModuleList(
          ...     (0): Linear(in_features=16, out_features=65536, bias=True)
          ...     (1): Sequential(
          ...       (0): ConvTranspose2d(1024, 512, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1))
          ...       (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          ...       (2): ReLU()
          ...     )
          ...     (2): Sequential(
          ...       (0): ConvTranspose2d(512, 256, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), output_padding=(1, 1))
          ...       (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          ...       (2): ReLU()
          ...     )
          ...     (3): Sequential(
          ...       (0): ConvTranspose2d(256, 3, kernel_size=(4, 4), stride=(1, 1), padding=(2, 2))
          ...       (1): Sigmoid()
          ...     )
          ...   )
          ... )
  
  
  and then passed to a :class:`pythae.models` instance
  
      >>> from pythae.models import VAE
      >>> model = VAE(model_config=model_config, decoder=decoder)
      >>> model.decoder == decoder
      ... True
  
  
  .. note::
  
      Please note that this decoder is suitable for **all** models.
  
      .. code-block::
  
          >>> import torch
          >>> input = torch.randn(2, 16)
          >>> out = decoder(input)
          >>> out.reconstruction.shape
          ... torch.Size([2, 3, 32, 32])
class_docstr_tok: ["A","Convolutional","decoder","Neural","net","suited","for","CIFAR","and","Autoencoder-based","models",".","It","can","be","built","as","follows",":","..","code-block",":",":",">",">",">","from","pythae.models.nn.benchmarks.cifar","import","Decoder_Conv_AE_CIFAR",">",">",">","from","pythae.models","import","VAEConfig",">",">",">","model_config","=","VAEConfig","(","input_dim=","(","3",",","32",",","32",")",",","latent_dim=16",")",">",">",">","decoder","=","Decoder_Conv_AE_CIFAR","(","model_config",")",">",">",">","decoder","...","Decoder_Conv_AE_CIFAR","(","...","(","layers",")",":","ModuleList","(","...","(","0",")",":","Linear","(","in_features=16",",","out_features=65536",",","bias=True",")","...","(","1",")",":","Sequential","(","...","(","0",")",":","ConvTranspose2d","(","1024",",","512",",","kernel_size=","(","4",",","4",")",",","stride=","(","2",",","2",")",",","padding=","(","1",",","1",")",")","...","(","1",")",":","BatchNorm2d","(","512",",","eps=1e-05",",","momentum=0.1",",","affine=True",",","track_running_stats=True",")","...","(","2",")",":","ReLU","(",")","...",")","...","(","2",")",":","Sequential","(","...","(","0",")",":","ConvTranspose2d","(","512",",","256",",","kernel_size=","(","4",",","4",")",",","stride=","(","2",",","2",")",",","padding=","(","1",",","1",")",",","output_padding=","(","1",",","1",")",")","...","(","1",")",":","BatchNorm2d","(","256",",","eps=1e-05",",","momentum=0.1",",","affine=True",",","track_running_stats=True",")","...","(","2",")",":","ReLU","(",")","...",")","...","(","3",")",":","Sequential","(","...","(","0",")",":","ConvTranspose2d","(","256",",","3",",","kernel_size=","(","4",",","4",")",",","stride=","(","1",",","1",")",",","padding=","(","2",",","2",")",")","...","(","1",")",":","Sigmoid","(",")","...",")","...",")","...",")","and","then","passed","to","a",":","class",":","`","pythae.models","`","instance",">",">",">","from","pythae.models","import","VAE",">",">",">","model","=","VAE","(","model_config=model_config",",","decoder=decoder",")",">",">",">","model.decoder","==","decoder","...","True","..","note",":",":","Please","note","that","this","decoder","is","suitable","for","*","*","all","*","*","models",".","..","code-block",":",":",">",">",">","import","torch",">",">",">","input","=","torch.randn","(","2",",","16",")",">",">",">","out","=","decoder","(","input",")",">",">",">","out.reconstruction.shape","...","torch.Size","(","[","2",",","3",",","32",",","32","]",")"]
code: def __init__(self, args: dict):
      BaseDecoder.__init__(self)
      self.input_dim = (3, 32, 32)
      self.latent_dim = args.latent_dim
      self.n_channels = 3
  
      layers = nn.ModuleList()
  
      layers.append(nn.Linear(args.latent_dim, 1024 * 8 * 8))
  
      layers.append(
          nn.Sequential(
              nn.ConvTranspose2d(1024, 512, 4, 2, padding=1),
              nn.BatchNorm2d(512),
              nn.ReLU(),
          )
      )
  
      layers.append(
          nn.Sequential(
              nn.ConvTranspose2d(
                  512, 256, 4, 2, padding=1, output_padding=1
              ),
              nn.BatchNorm2d(256),
              nn.ReLU(),
          )
      )
  
      layers.append(
          nn.Sequential(
              nn.ConvTranspose2d(256, self.n_channels, 4, 1, padding=2),
              nn.Sigmoid(),
          )
      )
  
      self.layers = layers
      self.depth = len(layers)
  
imports: from typing import List
  import torch
  import torch.nn
  from ....base import BaseAEConfig
  from ....base.base_utils import ModelOutput
  from ...base_architectures import BaseDecoder, BaseDiscriminator, BaseEncoder
label_desc: Use image node_id 1 to create a new Decoder_Conv_AE_CIFAR object from inherited base classes: BaseDecoder with example: obj = Decoder_Conv_AE_CIFAR(args)