code: def __init__(
      self,
      input_dimension: int,
      output_dimension: int,
      _ratio: _typing.Union[float, int],
      _dropout: _typing.Optional[float],
      _act: _typing.Optional[str],
      num_graph_features: _typing.Optional[int],
  ):
      super(_DiffPoolDecoder, self).__init__()
      self.input_dimension = input_dimension
      self.output_dimension = output_dimension
      self.ratio: _typing.Union[float, int] = _ratio
      self._act: _typing.Optional[str] = _act
      self.dropout: _typing.Optional[float] = _dropout
      self.num_graph_features: _typing.Optional[
          int
      ] = num_graph_features
  
      self.conv1 = GraphConv(self.input_dimension, 128)
      self.pool1 = TopKPooling(128, ratio=self.ratio)
      self.conv2 = GraphConv(128, 128)
      self.pool2 = TopKPooling(128, ratio=self.ratio)
      self.conv3 = GraphConv(128, 128)
      self.pool3 = TopKPooling(128, ratio=self.ratio)
  
      if (
          isinstance(self.num_graph_features, int)
          and self.num_graph_features > 0
      ):
          self.lin1 = torch.nn.Linear(
              256 + self.num_graph_features, 128
          )
      else:
          self.lin1 = torch.nn.Linear(256, 128)
      self.lin2 = torch.nn.Linear(128, 64)
      self.lin3 = torch.nn.Linear(64, self.output_dimension)
  
imports: import torch.nn.functional
  import typing
  import torch_geometric
  from torch_geometric.nn.conv import GraphConv
  from torch_geometric.nn.pool import TopKPooling
  from torch_geometric.nn.glob import global_add_pool, global_max_pool, global_mean_pool
  from ...encoders import base_encoder
  from ..None import base_decoder, decoder_registry
  from ...None import _utils
label_desc: Use image node_id 1 to create a new _DiffPoolDecoder object from inherited base classes: torch.nn with example: obj = _DiffPoolDecoder(input_dimension, output_dimension, _ratio, _dropout, _act, num_graph_features)