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