Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.experimental.preprocessing.IntegerLookup

Преобразует целые числа из словаря в целочисленные индексы.

Наследуется от: PreprocessingLayer, Layer, Module

tf.keras.layers.experimental.preprocessing.IntegerLookup(
    max_values=None, num_oov_indices=1, mask_value=0, oov_value=-1, vocabulary=None,
    invert=False, **kwargs
)

Этот слой преобразует набор произвольных целых чисел в целочисленный вывод с помощью табличного поиска, с необязательной обработкой значений, отсутствующих в словаре.

Если необходимо, пользователь может вызвать метод adapt() этого слоя на наборе данных, который проанализирует набор данных, определит частоту отдельных строковых значений и создаст словарь из них. Этот словарь может иметь неограниченный размер или быть ограниченным, в зависимости от параметров конфигурации этого слоя; если уникальных значений во входных данных больше, чем максимальный размер словаря, для создания словаря будут использоваться наиболее часто встречающиеся термины.

Примеры:

Создание слоя поиска со словарем, известным заранее

В этом примере создается слой поиска со словарем, заданным заранее.

vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup(vocabulary=vocab)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[2, 4, 5],
       [5, 1, 3]])>

Создание слоя поиска со словарем, адаптированным к набору данных

В этом примере создается слой поиска, и словарь генерируется путём анализа набора данных.

data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup()
layer.adapt(data)
layer.get_vocabulary()
[0, -1, 42, 1138, 1000, 36, 12]

Обратите внимание, как значение маски 0 и значение OOV -1 были добавлены в словарь. Остальные значения отсортированы по частоте (1138, который встречается 2 раза, идёт первым), а затем по обратному порядку.

data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup()
layer.adapt(data)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[6, 3, 2],
       [2, 4, 5]])>

Поиск со множеством токенов OOV.

В этом примере показано, как использовать слой поиска со множеством токенов OOV. Когда слой создаётся с более чем одним токеном OOV, все значения OOV хешируются в количестве OOV-корзин, распределяя значения OOV детерминированным образом по набору.

vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [37, 1000, 36]])
layer = IntegerLookup(vocabulary=vocab, num_oov_indices=2)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[3, 5, 6],
       [2, 1, 4]])>

Обратите внимание, что выходной результат для значения OOV 37 равен 2, а для значения OOV 1000 равен 1. Индексы терминов из словаря увеличены на 1 по сравнению с предыдущими примерами (12 отображается как 3 и т. д.) для выделения места для дополнительных значений OOV.

Обратный поиск

В этом примере показано, как отобразить индексы на значения с помощью этого слоя. (Вы также можете использовать adapt() с inverse=True, но для простоты мы передадим словарь в этом примере.)

vocab = [12, 36, 1138, 42]
data = tf.constant([[1, 3, 4], [4, 5, 2]])
layer = IntegerLookup(vocabulary=vocab, invert=True)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[  12, 1138,   42],
       [  42,   -1,   36]])>

Обратите внимание, что целое число 5, которое не входит в словарь, возвращает токен OOV.

Прямой и обратный поиск

В этом примере показано, как использовать словарь стандартного слоя поиска для создания слоя обратного поиска.

vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup(vocabulary=vocab)
i_layer = IntegerLookup(vocabulary=layer.get_vocabulary(), invert=True)
int_data = layer(data)
i_layer(int_data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[  12, 1138,   42],
       [  42,   -1,   36]])>

В этом примере входное значение 1000 привело к выводу -1, так как 1000 не было в словаре - оно было представлено как OOV, и все значения OOV возвращаются как -1 в обратном слое. Также обратите внимание, что для работы обратного поиска необходимо предварительно задать словарь forward слоя, либо напрямую, либо через fit(), прежде чем вызывать get_vocabulary().

Атрибуты
max_values Максимальный размер словаря для этого слоя. Если None, размер словаря не ограничен. Обратите внимание, что этот словарь включает значения OOV и маски, поэтому эффективное количество значений равно (max_values - num_oov_values - (1, если mask_token)).
num_oov_indices Количество значений, отсутствующих в словаре (OOV); по умолчанию
  1. Если это значение больше 1, входные OOV-значения модулируются для определения их OOV-значения; если это значение равно 0, передача входного OOV-значения приведёт к возвращению '-1' для этого значения в выходном тензоре. (Обратите внимание, что, поскольку значение -1, а не 0, это позволит вам эффективно отбрасывать OOV-значения из категориальных кодировок.)
mask_value Значение, представляющее входные данные маски; оно отображается на индекс 0. По умолчанию 0. Если установлено None, термин маски не будет добавлен, а значения OOV, если таковые имеются, будут проиндексированы с (0...num_oov_values) вместо (1...num_oov_values+1).
oov_value Значение, представляющее значение, отсутствующее в словаре (OOV). По умолчанию -1.
vocabulary Необязательный список значений или путь к текстовому файлу, содержащему словарь для загрузки в этот слой. Файл должен содержать по одному значению на строке. Если список или файл содержит один и тот же токен несколько раз, будет выброшено исключение.
invert Если True, этот слой будет отображать индексы на элементы словаря вместо отображения элементов словаря на индексы.

Методы

adapt

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

adapt(
    data, reset_state=True
)

Подстраивает состояние слоя предобработки под набор данных.

Переопределяет метод adapt по умолчанию, чтобы применить соответствующую предобработку к входным данным перед передачей в комбинатор.

Аргументы
data Данные для обучения. Может быть передано либо как набор данных tf.data, либо как массив numpy.
reset_state Необязательный аргумент, указывающий, следует ли очистить состояние слоя в начале вызова adapt. Это должно быть True для этого слоя, который не поддерживает повторные вызовы adapt.

get_vocabulary

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

get_vocabulary()

set_vocabulary

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

set_vocabulary(
    vocab
)

Устанавливает данные словаря для этого слоя с inverse=False.

Этот метод устанавливает словарь для этого слоя напрямую, вместо анализа набора данных через 'adapt'. Он должен использоваться всякий раз, когда информация о словаре уже известна. Если данные словаря уже присутствуют в слое, этот метод либо заменит их

Аргументы
vocab Массив строковых токенов.
Исключения
ValueError Если входов слишком много, входы не совпадают или отсутствуют входные данные.

vocab_size

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

vocab_size()

© 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/r2.4/api_docs/python/tf/keras/layers/experimental/preprocessing/IntegerLookup

Spec-Zone.ru

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