LSTM

class opennmt.layers.LSTM(*args, **kwargs)[source]

A multi-layer LSTM.

This differs from using opennmt.layers.RNN with a LSTMCell in 2 ways:

  • It uses tf.keras.layers.LSTM which is possibly accelerated by cuDNN on GPU.

  • Bidirectional outputs of each layer are reduced before feeding them to the next layer.

Inherits from: keras.src.engine.base_layer.Layer

__init__(num_layers, num_units, bidirectional=False, reducer=<opennmt.layers.reducer.ConcatReducer object>, dropout=0, residual_connections=False, **kwargs)[source]

Initializes the layer.

Parameters
  • num_layers – Number of stacked LSTM layers.

  • num_units – Dimension of the output space of each LSTM.

  • bidirectional – Make each layer bidirectional.

  • reducer – A opennmt.layers.Reducer instance to merge the bidirectional states and outputs of each layer.

  • dropout – The probability to drop units in each layer output.

  • residual_connections – If True, each layer input will be added to its output.

  • **kwargs – Additional layer arguments.

call(inputs, mask=None, training=None, initial_state=None)[source]

This is where the layer’s logic lives.

The call() method may not create state (except in its first invocation, wrapping the creation of variables or other resources in tf.init_scope()). It is recommended to create state, including tf.Variable instances and nested Layer instances,

in __init__(), or in the build() method that is

called automatically before call() executes for the first time.

Parameters
  • inputs

    Input tensor, or dict/list/tuple of input tensors. The first positional inputs argument is subject to special rules: - inputs must be explicitly passed. A layer cannot have zero

    arguments, and inputs cannot be provided via the default value of a keyword argument.

    • NumPy array or Python scalar values in inputs get cast as tensors.

    • Keras mask metadata is only collected from inputs.

    • Layers are built (build(input_shape) method) using shape info from inputs only.

    • input_spec compatibility is only checked against inputs.

    • Mixed precision input casting is only applied to inputs. If a layer has tensor arguments in *args or **kwargs, their casting behavior in mixed precision should be handled manually.

    • The SavedModel input specification is generated using inputs only.

    • Integration with various ecosystem packages like TFMOT, TFLite, TF.js, etc is only supported for inputs and not for tensors in positional and keyword arguments.

  • *args – Additional positional arguments. May contain tensors, although this is not recommended, for the reasons above.

  • **kwargs

    Additional keyword arguments. May contain tensors, although this is not recommended, for the reasons above. The following optional keyword arguments are reserved: - training: Boolean scalar tensor of Python boolean indicating

    whether the call is meant for training or inference.

    • mask: Boolean input mask. If the layer’s call() method takes a mask argument, its default value will be set to the mask generated for inputs by the previous layer (if input did come from a layer that generated a corresponding mask, i.e. if it came from a Keras layer with masking support).

Returns

A tensor or list/tuple of tensors.