class_docstr: A recurrent GRU encoder.
  
  This encoder has...
  - Zero or one tokenizers.
  - One or more GRU layers.
  - One linear output layer.
code: def get_output_specs(self) -> Optional[Spec]:
      return SpecDict(
          {
              ENCODER_OUT: TensorSpec(
                  "b, t, d",
                  d=self.config.output_dims[0],
                  framework="torch",
              ),
              STATE_OUT: {
                  "h": TensorSpec(
                      "b, l, h",
                      h=self.config.hidden_dim,
                      l=self.config.num_layers,
                      framework="torch",
                  ),
              },
          }
      )
  
imports: from typing import Optional
  import tree
  from ray.rllib.core.models.base import Encoder, ActorCriticEncoder, StatefulActorCriticEncoder, STATE_IN, STATE_OUT, ENCODER_OUT
  from ray.rllib.core.models.base import Model, tokenize
  from ray.rllib.core.models.configs import ActorCriticEncoderConfig, CNNEncoderConfig, MLPEncoderConfig, RecurrentEncoderConfig
  from ray.rllib.core.models.specs.specs_base import Spec
  from ray.rllib.core.models.specs.specs_base import TensorSpec
  from ray.rllib.core.models.specs.specs_dict import SpecDict
  from ray.rllib.core.models.torch.base import TorchModel
  from ray.rllib.core.models.torch.primitives import TorchMLP, TorchCNN
  from ray.rllib.models.utils import get_initializer_fn
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.utils.annotations import override
  from ray.rllib.utils.framework import try_import_torch
label_desc: Use image node_id 3 for calling the TorchGRUEncoder obj's underlying member method code with example usage: obj.get_output_specs() and returns: SpecDict