Spec-Zone.ru › TensorFlow 1.15

tf.nn.ctc_loss

Просмотреть исходный код на GitHub

Вычисляет потерю CTC (Connectionist Temporal Classification).

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.nn.ctc_loss

tf.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, представленную в статье:

A. Graves, S. Fernandez, F. Gomez, J. Schmidhuber. Connectionist Temporal Classification: Labeling Unsegmented Sequence Data with Recurrent Neural Networks. ICML 2006, Pittsburgh, USA, pp. 369-376.

Требования к вводу:

sequence_length(b) <= time for all b

max(labels.indices(labels.indices[:, 1] == b, 2))
  <= sequence_length(b) for all b.

Примечания:

Этот класс выполняет для вас операцию softmax, поэтому входные данные должны быть, например, линейными проекциями выходов LSTM.

Размер внутреннего измерения тензора num_classes, inputs, представляет 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 3-мерный float Tensor. Если time_major == False, это будет Tensor формы: [batch_size, max_time, num_classes]. Если time_major == True (по умолчанию), это будет Tensor формы: [max_time, batch_size, num_classes]. Логиты.
sequence_length 1-мерный int32 вектор, размер [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 имеют порядок по партиям, поэтому эта функция также принимает входные данные в порядке по партиям.
logits Псевдоним для входных данных.
Возвращаемые значения
1-мерный float Tensor, размер [batch], содержащий отрицательные логарифмические вероятности.
Возбуждение
TypeError если labels не является SparseTensor.

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

Spec-Zone.ru

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