class_docstr: SimpleFeedForwardEstimator shows how to build a simple MLP model predicting
  the next target time-steps given the previous ones.
  
  Given that we want to define a gluon model trainable by SGD, we inherit the
  parent class `GluonEstimator` that handles most of the logic for fitting a
  neural-network.
  
  We thus only have to define:
  
  1. How the data is transformed before being fed to our model::
  
      def create_transformation(self) -> Transformation
  
  2. How the training happens::
  
      def create_training_network(self) -> HybridBlock
  
  3. how the predictions can be made for a batch given a trained network::
  
      def create_predictor(
           self,
           transformation: Transformation,
           trained_net: HybridBlock,
      ) -> Predictor
  
  
  Parameters
  ----------
  prediction_length
      Length of the prediction horizon
  trainer
      Trainer object to be used (default: Trainer())
  num_hidden_dimensions
      Number of hidden nodes in each layer (default: [40, 40])
  context_length
      Number of time units that condition the predictions
      (default: None, in which case context_length = prediction_length)
  distr_output
      Distribution to fit (default: StudentTOutput())
  batch_normalization
      Whether to use batch normalization (default: False)
  mean_scaling
      Scale the network input by the data mean and the network output by
      its inverse (default: True)
  num_parallel_samples
      Number of evaluation samples per time series to increase parallelism
      during inference. This is a model optimization that does not affect the
      accuracy (default: 100)
  train_sampler
      Controls the sampling of windows during training.
  validation_sampler
      Controls the sampling of windows during validation.
  batch_size
      The size of the batches to be used training and prediction.
class_docstr_tok: ["SimpleFeedForwardEstimator","shows","how","to","build","a","simple","MLP","model","predicting","the","next","target","time-steps","given","the","previous","ones",".","Given","that","we","want","to","define","a","gluon","model","trainable","by","SGD",",","we","inherit","the","parent","class","`","GluonEstimator","`","that","handles","most","of","the","logic","for","fitting","a","neural-network",".","We","thus","only","have","to","define",":","1",".","How","the","data","is","transformed","before","being","fed","to","our","model",":",":","def","create_transformation","(","self",")","-",">","Transformation","2",".","How","the","training","happens",":",":","def","create_training_network","(","self",")","-",">","HybridBlock","3.","how","the","predictions","can","be","made","for","a","batch","given","a","trained","network",":",":","def","create_predictor","(","self",",","transformation",":","Transformation",",","trained_net",":","HybridBlock",",",")","-",">","Predictor","Parameters","--","--","--","--","--","prediction_length","Length","of","the","prediction","horizon","trainer","Trainer","object","to","be","used","(","default",":","Trainer","(",")",")","num_hidden_dimensions","Number","of","hidden","nodes","in","each","layer","(","default",":","[","40",",","40","]",")","context_length","Number","of","time","units","that","condition","the","predictions","(","default",":","None",",","in","which","case","context_length","=","prediction_length",")","distr_output","Distribution","to","fit","(","default",":","StudentTOutput","(",")",")","batch_normalization","Whether","to","use","batch","normalization","(","default",":","False",")","mean_scaling","Scale","the","network","input","by","the","data","mean","and","the","network","output","by","its","inverse","(","default",":","True",")","num_parallel_samples","Number","of","evaluation","samples","per","time","series","to","increase","parallelism","during","inference",".","This","is","a","model","optimization","that","does","not","affect","the","accuracy","(","default",":","100",")","train_sampler","Controls","the","sampling","of","windows","during","training",".","validation_sampler","Controls","the","sampling","of","windows","during","validation",".","batch_size","The","size","of","the","batches","to","be","used","training","and","prediction","."]
code: def create_transformation(self) -> Transformation:
      return SelectFields(
          [
              FieldName.ITEM_ID,
              FieldName.INFO,
              FieldName.START,
              FieldName.TARGET,
          ],
          allow_missing=True,
      ) + AddObservedValuesIndicator(
          target_field=FieldName.TARGET,
          output_field=FieldName.OBSERVED_VALUES,
          dtype=self.dtype,
          imputation_method=self.imputation_method,
      )
  
imports: from functools import partial
  from typing import List, Optional
  from mxnet.gluon import HybridBlock
  from gluonts.core.component import validated
  from gluonts.dataset.common import Dataset
  from gluonts.dataset.field_names import FieldName
  from gluonts.dataset.loader import DataLoader, TrainDataLoader, ValidationDataLoader
  from gluonts.model.forecast_generator import DistributionForecastGenerator
  from gluonts.mx.batchify import batchify
  from gluonts.mx.distribution import DistributionOutput, StudentTOutput
  from gluonts.mx.model.estimator import GluonEstimator
  from gluonts.mx.model.predictor import RepresentableBlockPredictor
  from gluonts.mx.trainer import Trainer
  from gluonts.mx.util import get_hybrid_forward_input_names
  from gluonts.transform import AddObservedValuesIndicator, ExpectedNumInstanceSampler, InstanceSampler, InstanceSplitter, SelectFields, TestSplitSampler, Transformation, ValidationSplitSampler
  from gluonts.transform.feature import DummyValueImputation, MissingValueImputation
  from ._network import SimpleFeedForwardDistributionNetwork, SimpleFeedForwardSamplingNetwork, SimpleFeedForwardTrainingNetwork
label_desc: Use image node_id 2 for calling the SimpleFeedForwardEstimator obj's underlying member method code with example usage: obj.create_transformation() and returns: unknown