parameters: (labels,
                  logits,
                  label_length,
                  logit_length,
                  logits_time_major=True,
                  unique=None,
                  blank_index=None,
                  name=None)
return_statement: return ctc_loss_dense(
        labels=labels,
        logits=logits,
        label_length=label_length,
        logit_length=logit_length,
        logits_time_major=logits_time_major,
        unique=unique,
        blank_index=blank_index,
        name=name)
docstring: Computes CTC (Connectionist Temporal Classification) loss.
  
    This op implements the CTC loss as presented in (Graves et al., 2006).
  
    Notes:
  
    - Same as the "Classic CTC" in TensorFlow 1.x's tf.compat.v1.nn.ctc_loss
      setting of preprocess_collapse_repeated=False, ctc_merge_repeated=True
    - Labels may be supplied as either a dense, zero-padded tensor with a
      vector of label sequence lengths OR as a SparseTensor.
    - On TPU and GPU: Only dense padded labels are supported.
    - On CPU: Caller may use SparseTensor or dense padded labels but calling with
      a SparseTensor will be significantly faster.
    - Default blank label is 0 rather num_classes - 1, unless overridden by
      blank_index.
  
    Args:
      labels: tensor of shape [batch_size, max_label_seq_length] or SparseTensor
      logits: tensor of shape [frames, batch_size, num_labels], if
        logits_time_major == False, shape is [batch_size, frames, num_labels].
      label_length: tensor of shape [batch_size], None if labels is SparseTensor
        Length of reference label sequence in labels.
      logit_length: tensor of shape [batch_size] Length of input sequence in
        logits.
      logits_time_major: (optional) If True (default), logits is shaped [time,
        batch, logits]. If False, shape is [batch, time, logits]
      unique: (optional) Unique label indices as computed by
        ctc_unique_labels(labels).  If supplied, enable a faster, memory efficient
        implementation on TPU.
      blank_index: (optional) Set the class index to use for the blank label.
        Negative values will start from num_classes, ie, -1 will reproduce the
        ctc_loss behavior of using num_classes - 1 for the blank symbol. There is
        some memory/performance overhead to switching from the default of 0 as an
        additional shifted copy of the logits may be created.
      name: A name for this `Op`. Defaults to "ctc_loss_dense".
  
    Returns:
      loss: tensor of shape [batch_size], negative log probabilities.
  
    References:
        Connectionist Temporal Classification - Labeling Unsegmented Sequence Data
        with Recurrent Neural Networks:
          [Graves et al., 2006](https://dl.acm.org/citation.cfm?id=1143891)
          ([pdf](http://www.cs.toronto.edu/~graves/icml_2006.pdf))
docstring_summary: Computes CTC (Connectionist Temporal Classification) loss.
docstring_tokens: Computes CTC ( Connectionist Temporal Classification ) loss .
function: def ctc_loss_v3(labels,
                  logits,
                  label_length,
                  logit_length,
                  logits_time_major=True,
                  unique=None,
                  blank_index=None,
                  name=None):
    """Computes CTC (Connectionist Temporal Classification) loss.
  
    This op implements the CTC loss as presented in (Graves et al., 2006).
  
    Notes:
  
    - Same as the "Classic CTC" in TensorFlow 1.x's tf.compat.v1.nn.ctc_loss
      setting of preprocess_collapse_repeated=False, ctc_merge_repeated=True
    - Labels may be supplied as either a dense, zero-padded tensor with a
      vector of label sequence lengths OR as a SparseTensor.
    - On TPU and GPU: Only dense padded labels are supported.
    - On CPU: Caller may use SparseTensor or dense padded labels but calling with
      a SparseTensor will be significantly faster.
    - Default blank label is 0 rather num_classes - 1, unless overridden by
      blank_index.
  
    Args:
      labels: tensor of shape [batch_size, max_label_seq_length] or SparseTensor
      logits: tensor of shape [frames, batch_size, num_labels], if
        logits_time_major == False, shape is [batch_size, frames, num_labels].
      label_length: tensor of shape [batch_size], None if labels is SparseTensor
        Length of reference label sequence in labels.
      logit_length: tensor of shape [batch_size] Length of input sequence in
        logits.
      logits_time_major: (optional) If True (default), logits is shaped [time,
        batch, logits]. If False, shape is [batch, time, logits]
      unique: (optional) Unique label indices as computed by
        ctc_unique_labels(labels).  If supplied, enable a faster, memory efficient
        implementation on TPU.
      blank_index: (optional) Set the class index to use for the blank label.
        Negative values will start from num_classes, ie, -1 will reproduce the
        ctc_loss behavior of using num_classes - 1 for the blank symbol. There is
        some memory/performance overhead to switching from the default of 0 as an
        additional shifted copy of the logits may be created.
      name: A name for this `Op`. Defaults to "ctc_loss_dense".
  
    Returns:
      loss: tensor of shape [batch_size], negative log probabilities.
  
    References:
        Connectionist Temporal Classification - Labeling Unsegmented Sequence Data
        with Recurrent Neural Networks:
          [Graves et al., 2006](https://dl.acm.org/citation.cfm?id=1143891)
          ([pdf](http://www.cs.toronto.edu/~graves/icml_2006.pdf))
    """
    if isinstance(labels, sparse_tensor.SparseTensor):
      if blank_index is None:
        raise ValueError(
            "Argument `blank_index` must be provided when labels is a "
            "SparseTensor.")
  
      if blank_index < 0:
        blank_index += _get_dim(logits, 2)
  
      logits = ops.convert_to_tensor(logits, name="logits")
  
      params = {
          "labels": labels,
          "logits": logits,
          "logit_length": logit_length,
          "logits_time_major": logits_time_major,
          "blank_index": blank_index
      }
  
      if context.executing_eagerly():
        device_type = _get_context_device_type()
        can_use_gpu = (
            # Either user specified GPU or unspecified but GPU is available.
            (device_type == _GPU_DEVICE_NAME or
             (device_type is None and context.num_gpus() > 0)))
        # Under eager context, check the device placement and prefer the
        if can_use_gpu:
          res = _ctc_loss_op_cudnn(**params)
        else:
          res = _ctc_loss_op_standard(**params)
      else:
        api_name = "ctc_loss_" + str(uuid.uuid4())
        ctc_loss_op_standard = _generate_defun_backend(api_name, _CPU_DEVICE_NAME,
                                                       _ctc_loss_op_standard)
        ctc_loss_op_cudnn = _generate_defun_backend(api_name, _GPU_DEVICE_NAME,
                                                    _ctc_loss_op_cudnn)
        res = ctc_loss_op_standard(**params)
        function_eager.register(ctc_loss_op_cudnn, **params)
      return res
  
    if blank_index is None:
      blank_index = 0
  
    return ctc_loss_dense(
        labels=labels,
        logits=logits,
        label_length=label_length,
        logit_length=logit_length,
        logits_time_major=logits_time_major,
        unique=unique,
        blank_index=blank_index,
        name=name)
function_tokens: def ctc_loss_v3 ( labels , logits , label_length , logit_length , logits_time_major = True , unique = None , blank_index = None , name = None ) : if isinstance ( labels , sparse_tensor . SparseTensor ) : if blank_index is None : raise ValueError ( "Argument `blank_index` must be provided when labels is a " "SparseTensor." ) if blank_index < 0 : blank_index += _get_dim ( logits , 2 ) logits = ops . convert_to_tensor ( logits , name = "logits" ) params = { "labels" : labels , "logits" : logits , "logit_length" : logit_length , "logits_time_major" : logits_time_major , "blank_index" : blank_index } if context . executing_eagerly ( ) : device_type = _get_context_device_type ( ) can_use_gpu = ( # Either user specified GPU or unspecified but GPU is available. ( device_type == _GPU_DEVICE_NAME or ( device_type is None and context . num_gpus ( ) > 0 ) ) ) # Under eager context, check the device placement and prefer the if can_use_gpu : res = _ctc_loss_op_cudnn ( * * params ) else : res = _ctc_loss_op_standard ( * * params ) else : api_name = "ctc_loss_" + str ( uuid . uuid4 ( ) ) ctc_loss_op_standard = _generate_defun_backend ( api_name , _CPU_DEVICE_NAME , _ctc_loss_op_standard ) ctc_loss_op_cudnn = _generate_defun_backend ( api_name , _GPU_DEVICE_NAME , _ctc_loss_op_cudnn ) res = ctc_loss_op_standard ( * * params ) function_eager . register ( ctc_loss_op_cudnn , * * params ) return res if blank_index is None : blank_index = 0 return ctc_loss_dense ( labels = labels , logits = logits , label_length = label_length , logit_length = logit_length , logits_time_major = logits_time_major , unique = unique , blank_index = blank_index , name = name )