Класс IntegerLookup
Класс IntegerLookup преобразует целые числа
в последовательность индексов. Слой может работать
в двух режимах: как слой предобработки Keras
и как самостоятельный объект для преобразования данных.
Первым параметром передаётся словарь vocabulary
с целыми числами. Параметр num_oov_indices
задаёт количество индексов для чисел, которых нет
в словаре. Параметр mask_token задаёт
специальное значение для маскировки. Параметр
oov_token задаёт значение для неизвестных
чисел. Параметр output_mode определяет
формат вывода: int, one_hot,
multi_hot или count.
Слой поддерживает адаптацию к данным с помощью метода
adapt. При вызове метода слой анализирует
переданные целые числа и строит на их основе словарь.
Синтаксис
tf.keras.layers.IntegerLookup(
max_tokens=None,
num_oov_indices=1,
mask_token=None,
oov_token=-1,
vocabulary=None,
output_mode='int',
sparse=False,
name=None
)
Пример
Давайте создадим слой IntegerLookup
с фиксированным словарем и преобразуем целые числа:
import tensorflow as tf
layer = tf.keras.layers.IntegerLookup(
vocabulary=[1, 2, 3, 4, 5],
output_mode='int'
)
t = tf.constant([[1, 2, 3], [4, 5, 1]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[1 2 3]
[4 5 1]], shape=(2, 3), dtype=int64)
Пример
Давайте создадим слой с режимом вывода
one_hot:
import tensorflow as tf
layer = tf.keras.layers.IntegerLookup(
vocabulary=[1, 2, 3, 4, 5],
output_mode='one_hot'
)
t = tf.constant([[1, 2, 3], [4, 5, 1]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[0. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 0. 1. 0. 0.]]
[[0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 1. 0. 0. 0. 0.]]], shape=(2, 3, 6), dtype=float32)
Пример
Давайте создадим слой с режимом вывода
multi_hot и обработаем одномерный тензор:
import tensorflow as tf
layer = tf.keras.layers.IntegerLookup(
vocabulary=[1, 2, 3, 4, 5],
output_mode='multi_hot'
)
t = tf.constant([1, 2, 3, 4, 5])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor([0. 1. 1. 1. 1. 1.], shape=(6,), dtype=float32)
Пример
Давайте используем метод adapt
для автоматического построения словаря
из входных данных:
import tensorflow as tf
layer = tf.keras.layers.IntegerLookup(
output_mode='int'
)
data = tf.constant([[10, 20, 30], [40, 50, 10]])
layer.adapt(data)
t = tf.constant([[10, 20, 30], [40, 50, 10]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[1 2 3]
[4 5 1]], shape=(2, 3), dtype=int64)
Пример
Давайте создадим слой с несколькими индексами
для неизвестных значений num_oov_indices
и проверим обработку числа, которого нет в словаре:
import tensorflow as tf
layer = tf.keras.layers.IntegerLookup(
vocabulary=[1, 2, 3, 4, 5],
num_oov_indices=1,
output_mode='int'
)
t = tf.constant([1, 99, 3])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor([1 0 3], shape=(3,), dtype=int64)
Смотрите также
-
класс
CategoryEncoding,
который преобразует категориальные признаки в векторы -
класс
Discretization,
который разбивает непрерывные значения на интервалы -
класс
Hashing,
который преобразует категории в хеш-индексы -
функцию
to_number,
которая преобразует строки в числа