Spec-Zone.ru › TensorFlow 2.3

tf.keras.layers.experimental.preprocessing.IntegerLookup

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

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 в обратном слое. Также обратите внимание, что для работы обратного поиска необходимо предварительно установить словарь прямого слоя, либо непосредственно, либо с помощью метода 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 Dataset или как массив 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.3/api_docs/python/tf/keras/layers/experimental/preprocessing/IntegerLookup

Spec-Zone.ru

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