tf.compat.v1.nn.ctc_loss
Вычисляет функцию потерь CTC (Connectionist Temporal Classification).
tf.compat.v1.nn.ctc_loss(
labels,
inputs=None,
sequence_length=None,
preprocess_collapse_repeated=False,
ctc_merge_repeated=True,
ignore_longer_outputs_than_inputs=False,
time_major=True,
logits=None
)
Этот оператор реализует функцию потерь CTC, представленную в работе (Graves et al., 2006).
Требования к входным данным:
sequence_length(b) <= time for all b max(labels.indices(labels.indices[:, 1] == b, 2)) <= sequence_length(b) for all b.
Примечания:
Этот класс выполняет операцию softmax, поэтому на вход следует подавать, например, линейные проекции выходов LSTM.
Внутренний размер Tensor inputs, num_classes, задаёт num_labels + 1 классов, где num_labels — количество истинных меток, а наибольшее значение (num_classes - 1) зарезервировано для пустой метки.
Например, для словаря, содержащего 3 метки [a, b, c], num_classes = 4, индексы меток имеют вид {a: 0, b: 1, c: 2, blank: 3}.
Что касается аргументов preprocess_collapse_repeated и ctc_merge_repeated:
Если preprocess_collapse_repeated имеет значение True, перед вычислением функции потерь выполняется предварительная обработка, при которой повторяющиеся метки, переданные в функцию потерь, объединяются в одну метку. Это полезно, если обучающие метки получены, например, в результате принудительного выравнивания, поэтому в них есть ненужные повторы.
Если для ctc_merge_repeated задано значение False, то при вычислении CTC повторяющиеся непустые метки не объединяются и интерпретируются как отдельные метки. Это упрощённый (нестандартный) вариант CTC.
Ниже приведена таблица ожидаемого поведения первого порядка (в общих чертах):
-
preprocess_collapse_repeated=False,ctc_merge_repeated=TrueКлассическое поведение CTC: выходные данные содержат повторяющиеся истинные классы с пустыми метками между ними; также могут выводиться повторяющиеся классы без пустых меток между ними, которые декодер должен объединить.
-
preprocess_collapse_repeated=True,ctc_merge_repeated=FalseНе учится выводить повторяющиеся классы, поскольку они объединяются во входных метках до начала обучения.
-
preprocess_collapse_repeated=False,ctc_merge_repeated=FalseВыводит повторяющиеся классы с пустыми метками между ними, но обычно декодеру не требуется объединять повторяющиеся классы.
-
preprocess_collapse_repeated=True,ctc_merge_repeated=TrueНе проверено. Вероятнее всего, модель не научится выводить повторяющиеся классы.
Параметр ignore_longer_outputs_than_inputs позволяет задать поведение CTCLoss при обработке последовательностей, выходы которых длиннее входов. Если задано значение true, CTCLoss просто возвращает нулевой градиент для таких элементов; в противном случае возникает ошибка InvalidArgument, останавливающая обучение.
| Аргументы | |
|---|---|
labels | int32 SparseTensor. labels.indices[i, :] == [b, t] означает, что labels.values[i] хранит идентификатор для (пакета b, момента времени t). labels.values[i] должно принимать значения из [0, num_labels). Подробнее см. core/ops/ctc_ops.cc. |
inputs | 3D float Tensor. Если time_major == False, данные имеют форму Tensor: [batch_size, max_time, num_classes]. Если time_major == True (значение по умолчанию), данные имеют форму Tensor: [max_time, batch_size, num_classes]. Логиты. |
sequence_length | Вектор int32 размерности 1, размер [batch_size]. Длины последовательностей. |
preprocess_collapse_repeated | Логическое значение. По умолчанию: False. Если True, повторяющиеся метки объединяются перед вычислением CTC. |
ctc_merge_repeated | Логическое значение. По умолчанию: True. |
ignore_longer_outputs_than_inputs | Логическое значение. По умолчанию: False. Если True, последовательности, выходы которых длиннее входов, игнорируются. |
time_major | Формат формы тензоров inputs. Если True, эти Tensors должны иметь форму [max_time, batch_size, num_classes]. Если False, эти Tensors должны иметь форму [batch_size, max_time, num_classes]. Использование time_major = True (значение по умолчанию) немного эффективнее, поскольку позволяет избежать транспонирования в начале вычисления ctc_loss. Однако большинство данных TensorFlow имеют формат batch-major, поэтому эта функция также принимает входные данные в формате batch-major. |
logits | Псевдоним для inputs. |
| Возвращает | |
|---|---|
Одномерный float Tensor размером [batch], содержащий отрицательные логарифмы вероятностей. |
| Вызывает исключение | |
|---|---|
TypeError | если labels не является SparseTensor. |
| Ссылки | |
|---|---|
| Connectionist Temporal Classification — разметка несегментированных последовательностей данных с помощью рекуррентных нейронных сетей: Graves et al., 2006 (PDF) |
© 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/compat/v1/nn/ctc_loss