class_docstr: Abstract base class to implement feed-forward networks for probabilistic
  time series prediction.
  
  This class does not implement hybrid_forward: this is delegated
  to the two subclasses SimpleFeedForwardTrainingNetwork and
  SimpleFeedForwardPredictionNetwork, that define respectively how to
  compute the loss and how to generate predictions.
  
  Parameters
  ----------
  num_hidden_dimensions
      Number of hidden nodes in each layer.
  prediction_length
      Number of time units to predict.
  context_length
      Number of time units that condition the predictions.
  batch_normalization
      Whether to use batch normalization.
  mean_scaling
      Scale the network input by the data mean and the network output by
      its inverse.
  distr_output
      Distribution to fit.
  kwargs
class_docstr_tok: ["Abstract","base","class","to","implement","feed-forward","networks","for","probabilistic","time","series","prediction",".","This","class","does","not","implement","hybrid_forward",":","this","is","delegated","to","the","two","subclasses","SimpleFeedForwardTrainingNetwork","and","SimpleFeedForwardPredictionNetwork",",","that","define","respectively","how","to","compute","the","loss","and","how","to","generate","predictions",".","Parameters","--","--","--","--","--","num_hidden_dimensions","Number","of","hidden","nodes","in","each","layer",".","prediction_length","Number","of","time","units","to","predict",".","context_length","Number","of","time","units","that","condition","the","predictions",".","batch_normalization","Whether","to","use","batch","normalization",".","mean_scaling","Scale","the","network","input","by","the","data","mean","and","the","network","output","by","its","inverse",".","distr_output","Distribution","to","fit",".","kwargs"]
code: def get_distr(self, past_target: torch.Tensor) -> Distribution:
      # (batch_size, seq_len, target_dim) and (batch_size, seq_len, target_dim)
      scaled_target, target_scale = self.scaler(
          past_target,
          torch.ones_like(
              past_target
          ),  # TODO: pass the actual observed here
      )
  
      mlp_outputs = self.mlp(scaled_target)
      distr_args = self.distr_args_proj(mlp_outputs)
      return self.distr_output.distribution(
          distr_args, scale=target_scale.unsqueeze(1)
      )
  
file_path: gluonts/src/gluonts/nursery/robust-mts-attack/pts/model/simple_feedforward/simple_feedforward_network.py
imports: from typing import List
  import torch
  import torch.nn
  from torch.distributions import Distribution
  from gluonts.core.component import validated
  from gluonts.torch.modules.distribution_output import DistributionOutput
  from gluonts.torch.modules.lambda_layer import LambdaLayer
  from pts.modules import MeanScaler, NOPScaler
label_desc: Use image node_id 2 for calling the SimpleFeedForwardNetworkBase obj's underlying member method code with example usage: obj.get_distr(past_target) and returns: self