Spec-Zone.ru › TensorFlow

tf.nn.ctc_loss

Вычисляет функцию потерь CTC (Connectionist Temporal Classification).

tf.nn.ctc_loss(
    labels,
    logits,
    label_length,
    logit_length,
    logits_time_major=True,
    unique=None,
    blank_index=None,
    name=None
)

Эта операция реализует функцию потерь CTC, описанную в работе Graves et al., 2006

Коннекционистская временная классификация (CTC) — это тип выходных данных нейронной сети и связанная с ним функция оценки, используемые для обучения рекуррентных нейронных сетей (RNN), например сетей LSTM, решению последовательностных задач с переменной длительностью. Ее можно применять для таких задач, как распознавание рукописного текста в режиме реального времени или распознавание фонем в речевом аудио. CTC относится к выходным данным и оценке и не зависит от структуры используемой нейронной сети.

Примечания:

  • Этот класс выполняет для вас операцию softmax, поэтому logits должны быть, например, линейными проекциями выходных данных LSTM.
  • На выходе повторяющиеся классы разделяются пустыми метками; также могут выводиться повторяющиеся классы без пустых меток между ними, которые декодер должен объединить.
  • labels можно передать либо как плотный тензор Tensor с заполнением нулями и вектором длин последовательностей меток, либо как SparseTensor.
  • На TPU поддерживаются только плотные тензоры labels с заполнением.
  • На CPU и GPU можно использовать SparseTensor или плотные тензоры labels с заполнением, однако вызов с SparseTensor будет значительно быстрее.
  • По умолчанию пустая метка — 0, а не num_labels - 1 (где num_labels — размер внутреннего измерения logits), если не переопределено параметром blank_index.
tf.random.set_seed(50)
batch_size = 8
num_labels = 6
max_label_length = 5
num_frames = 12
labels = tf.random.uniform([batch_size, max_label_length],
                           minval=1, maxval=num_labels, dtype=tf.int64)
logits = tf.random.uniform([num_frames, batch_size, num_labels])
label_length = tf.random.uniform([batch_size], minval=2,
                                 maxval=max_label_length, dtype=tf.int64)
label_mask = tf.sequence_mask(label_length, maxlen=max_label_length,
                              dtype=label_length.dtype)
labels *= label_mask
logit_length = [num_frames] * batch_size
with tf.GradientTape() as t:
  t.watch(logits)
  ref_loss = tf.nn.ctc_loss(
      labels=labels,
      logits=logits,
      label_length=label_length,
      logit_length=logit_length,
      blank_index=0)
ref_grad = t.gradient(ref_loss, logits)
Аргументы
labels Tensor формы [batch_size, max_label_seq_length] или SparseTensor.
logits Tensor формы [frames, batch_size, num_labels]. Если logits_time_major == False, форма — [batch_size, frames, num_labels].
label_length Tensor формы [batch_size]. None, если labels является SparseTensor. Длина эталонной последовательности меток в labels.
logit_length Tensor формы [batch_size]. Длина входной последовательности в logits.
logits_time_major (необязательно) Если True (по умолчанию), logits имеет форму [frames, batch_size, num_labels]. Если False, форма — [batch_size, frames, num_labels].
unique (необязательно) Уникальные индексы меток, вычисленные с помощью ctc_unique_labels(labels). Если указаны, включают более быструю и эффективную по памяти реализацию на TPU.
blank_index (необязательно) Задает индекс класса для пустой метки. Отрицательные значения отсчитываются от num_labels, то есть -1 воспроизводит поведение ctc_loss, при котором для пустого символа используется num_labels - 1. Переход от значения по умолчанию 0 влечет некоторые дополнительные затраты памяти и производительности, поскольку может создаваться дополнительная копия со сдвигом logits.
name Имя для этого Op. По умолчанию — "ctc_loss_dense".
Возвращает
loss Одномерный float Tensor формы [batch_size], содержащий отрицательные логарифмы вероятностей.
Вызывает исключение
ValueError Аргумент blank_index необходимо указать, если labels является SparseTensor.
Ссылки
Коннекционистская временная классификация: разметка несегментированных последовательностей данных с помощью рекуррентных нейронных сетей: Graves et al., 2006 (PDF)

https://en.wikipedia.org/wiki/Connectionist_temporal_classification

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/nn/ctc_loss

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API