class_docstr: MNIST decoder used in the Counterfactual with Reinforcement Learning experiments. The model consists of a fully
  connected layer of 128 units with ReLU activation followed by a convolutional block. The convolutional block
  consists fo 4 convolutional layers having 8, 8, 8  and 1 channels and a kernel size of 3. Each convolutional layer,
  except the last one, has ReLU nonlinearities and is followed by an up-sampling layer of size 2. The final layers
  uses a sigmoid activation to clip the output values in [0, 1].
docstr: Constructor. 
docstr_tok: ["Constructor","."]
code: def __init__(self, **kwargs) -> None:
      """Constructor."""
      super().__init__(**kwargs)
  
      self.fc1 = keras.layers.Dense(128, activation="relu")
      self.reshape = keras.layers.Reshape((4, 4, 8))
      self.conv1 = keras.layers.Conv2D(
          8, (3, 3), padding="same", activation="relu"
      )
      self.up1 = keras.layers.UpSampling2D(size=(2, 2))
      self.conv2 = keras.layers.Conv2D(
          8, (3, 3), padding="same", activation="relu"
      )
      self.up2 = keras.layers.UpSampling2D(size=(2, 2))
      self.conv3 = keras.layers.Conv2D(
          8, (3, 3), padding="valid", activation="relu"
      )
      self.up3 = keras.layers.UpSampling2D(size=(2, 2))
      self.conv4 = keras.layers.Conv2D(
          1, (3, 3), padding="same", activation="sigmoid"
      )
  
imports: import tensorflow
  import tensorflow.keras
  from typing import List
label_desc: Use image node_id 1 to create a new MNISTDecoder object from inherited base classes: keras with example: obj = MNISTDecoder()