# tf_agents.networks.q_rnn_network.QRnnNetwork

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/networks/q_rnn_network.py#L29-L123) |

Recurrent network.

Inherits From: [`LSTMEncodingNetwork`](https://www.tensorflow.org/agents/api_docs/python/tf_agents/networks/lstm_encoding_network/LSTMEncodingNetwork), [`Network`](https://www.tensorflow.org/agents/api_docs/python/tf_agents/networks/Network)

    tf_agents.networks.q_rnn_network.QRnnNetwork(
        input_tensor_spec,
        action_spec,
        preprocessing_layers=None,
        preprocessing_combiner=None,
        conv_layer_params=None,
        input_fc_layer_params=(75, 40),
        lstm_size=None,
        output_fc_layer_params=(75, 40),
        activation_fn=tf.keras.activations.relu,
        rnn_construction_fn=None,
        rnn_construction_kwargs=None,
        dtype=tf.float32,
        name='QRnnNetwork'
    )

<br />

<br />

<br />

| ## Args ||
|---|---|
| `input_tensor_spec` | A nest of `tensor_spec.TensorSpec` representing the input observations. |
| `action_spec` | A nest of `tensor_spec.BoundedTensorSpec` representing the actions. |
| `preprocessing_layers` | (Optional.) A nest of [`tf.keras.layers.Layer`](https://www.tensorflow.org/api_docs/python/tf/keras/Layer) representing preprocessing for the different observations. All of these layers must not be already built. For more details see the documentation of `networks.EncodingNetwork`. |
| `preprocessing_combiner` | (Optional.) A keras layer that takes a flat list of tensors and combines them. Good options include [`tf.keras.layers.Add`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Add) and `tf.keras.layers.Concatenate(axis=-1)`. This layer must not be already built. For more details see the documentation of `networks.EncodingNetwork`. |
| `conv_layer_params` | Optional list of convolution layers parameters, where each item is a length-three tuple indicating (filters, kernel_size, stride). |
| `input_fc_layer_params` | Optional list of fully connected parameters, where each item is the number of units in the layer. These feed into the recurrent layer. |
| `lstm_size` | An iterable of ints specifying the LSTM cell sizes to use. |
| `output_fc_layer_params` | Optional list of fully connected parameters, where each item is the number of units in the layer. These are applied on top of the recurrent layer. |
| `activation_fn` | Activation function, e.g. tf.keras.activations.relu,. |
| `rnn_construction_fn` | (Optional.) Alternate RNN construction function, e.g. tf.keras.layers.LSTM, tf.keras.layers.CuDNNLSTM. It is invalid to provide both rnn_construction_fn and lstm_size. |
| `rnn_construction_kwargs` | (Optional.) Dictionary or arguments to pass to rnn_construction_fn. The RNN will be constructed via: `rnn_layer = rnn_construction_fn(**rnn_construction_kwargs)` |
| `dtype` | The dtype to use by the convolution, LSTM, and fully connected layers. |
| `name` | A string representing name of the network. |

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `ValueError` | If any of `preprocessing_layers` is already built. |
| `ValueError` | If `preprocessing_combiner` is already built. |
| `ValueError` | If `action_spec` contains more than one action. |
| `ValueError` | If neither `lstm_size` nor `rnn_construction_fn` are provided. |
| `ValueError` | If both `lstm_size` and `rnn_construction_fn` are provided. |

<br />

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `input_tensor_spec` | Returns the spec of the input to the network of type InputSpec. |
| `layers` | Get the list of all (nested) sub-layers used in this Network. |
| `state_spec` | <br /> <br /> |

<br />

## Methods

### `copy`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/networks/network.py#L341-L355)

    copy(
        **kwargs
    )

Create a shallow copy of this network.

> [!NOTE]
> **Note:** Network layer weights are *never* copied. This method recreates the `Network` instance with the same arguments it was initialized with (excepting any new kwargs).

<br />

<br />

<br />

| Args ||
|---|---|
| `**kwargs` | Args to override when recreating this network. Commonly overridden args include 'name'. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A shallow copy of this network. ||

<br />

### `create_variables`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/networks/network.py#L188-L252)

    create_variables(
        input_tensor_spec=None, **kwargs
    )

Force creation of the network's variables.

Return output specs.

<br />

<br />

<br />

| Args ||
|---|---|
| `input_tensor_spec` | (Optional). Override or provide an input tensor spec when creating variables. |
| `**kwargs` | Other arguments to `network.call()`, e.g. `training=True`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| Output specs - a nested spec calculated from the outputs (excluding any batch dimensions). If any of the output elements is a tfp `Distribution`, the associated spec entry returned is a `DistributionSpec`. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | If no `input_tensor_spec` is provided, and the network did not provide one during construction. |

<br />

### `get_initial_state`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/networks/network.py#L465-L476)

    get_initial_state(
        batch_size=None
    )

Returns an initial state usable by the network.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch_size` | Tensor or constant: size of the batch dimension. Can be None in which case not dimensions gets added. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A nested object of type `self.state_spec` containing properly initialized Tensors. ||

<br />

### `get_layer`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/networks/network.py#L279-L314)

    get_layer(
        name=None, index=None
    )

Retrieves a layer based on either its name (unique) or index.

If `name` and `index` are both provided, `index` will take precedence.
Indices are based on order of horizontal graph traversal (bottom-up).

<br />

<br />

<br />

| Args ||
|---|---|
| `name` | String, name of layer. |
| `index` | Integer, index of layer. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A layer instance. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | In case of invalid layer name or index. |

<br />

### `summary`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/networks/network.py#L316-L339)

    summary(
        line_length=None, positions=None, print_fn=None
    )

Prints a string summary of the network.

<br />

<br />

<br />

| Args ||
|---|---|
| `line_length` | Total length of printed lines (e.g. set this to adapt the display to different terminal window sizes). |
| `positions` | Relative or absolute positions of log elements in each line. If not provided, defaults to `[.33, .55, .67, 1.]`. |
| `print_fn` | Print function to use. Defaults to `print`. It will be called on each line of the summary. You can set it to a custom function in order to capture the string summary. |

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | if `summary()` is called before the model is built. |

<br />