class_docstr: Decoder Network.
  
  Args:
      input_size (tuple[int, int]): Size of input image
      latent_vec_size (int): Size of latent vector z
      num_input_channels (int): Number of input channels in the image
      n_features (int): Number of features per convolution layer
      extra_layers (int): Number of extra layers since the network uses only a single encoder layer by default.
          Defaults to 0.
class_docstr_tok: ["Decoder","Network",".","Args",":","input_size","(","tuple","[","int",",","int","]",")",":","Size","of","input","image","latent_vec_size","(","int",")",":","Size","of","latent","vector","z","num_input_channels","(","int",")",":","Number","of","input","channels","in","the","image","n_features","(","int",")",":","Number","of","features","per","convolution","layer","extra_layers","(","int",")",":","Number","of","extra","layers","since","the","network","uses","only","a","single","encoder","layer","by","default",".","Defaults","to","0","."]
docstr: Return generated image.
docstr_tok: ["Return","generated","image","."]
code: def forward(self, input_tensor: Tensor) -> Tensor:
      """Return generated image."""
      output = self.latent_input(input_tensor)
      output = self.inverse_pyramid(output)
      output = self.extra_layers(output)
      output = self.final_layers(output)
      return output
  
imports: from __future__ import annotations
  import math
  import torch
  from torch import Tensor, nn
  from anomalib.data.utils.image import pad_nextpow2
label_desc: Use image node_id 2 for calling the Decoder obj's underlying member method code with example usage: obj.forward(input_tensor) and returns: output