Spec-Zone.ru › TensorFlow

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

Spec-Zone.ru

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