Класс SparseFeature
Класс SparseFeature используется при разборе примеров
tf.train.Example для описания разреженного признака,
значения которого хранятся в нескольких полях прото
(индексы, значения, форма). Класс применяется вместе с
функцией parse_example и позволяет преобразовать
разреженное представление в объект tf.sparse.SparseTensor.
Первым параметром передается индекс - уникальное имя признака.
Далее указываются имена полей прото для индексов, значений
и формы, а также типы данных этих полей.
Синтаксис
tf.io.SparseFeature(index_key, value_key, dtype, size, already_sorted=False)
Параметры
Класс принимает следующие параметры:
-
index_key- имя поля прото, содержащего индексы разреженного признака -
value_key- имя поля прото, содержащего значения разреженного признака -
dtype- тип данных значений признака -
size- размерность (форма) разреженного тензора -
already_sorted- нужно ли сортировать индексы (по умолчаниюFalse)
Пример
Давайте создадим описание разреженного признака
с индексным полем index, полем значений
value и размерностью 5:
import tensorflow as tf
feature = tf.io.SparseFeature(
index_key='index',
value_key='value',
dtype=tf.int64,
size=5
)
print(feature)
Результат выполнения кода:
SparseFeature(index_key='index', value_key='value', dtype=tf.int64, size=5, already_sorted=False)
Пример
Давайте соберем пример tf.train.Example
с разреженным признаком и распарсим его
с помощью parse_example:
import tensorflow as tf
example = tf.train.Example(
features=tf.train.Features(
feature={
'index': tf.train.Feature(
int64_list=tf.train.Int64List(value=[0, 2, 4])
),
'value': tf.train.Feature(
int64_list=tf.train.Int64List(value=[10, 20, 30])
)
}
)
)
serialized = example.SerializeToString()
feature_spec = {
'sparse': tf.io.SparseFeature(
index_key='index',
value_key='value',
dtype=tf.int64,
size=5
)
}
res = tf.io.parse_example(serialized, feature_spec)
print(res['sparse'])
Результат выполнения кода:
SparseTensor(indices=tf.Tensor(
[[0]
[2]
[4]], shape=(3, 1), dtype=int64), values=tf.Tensor([10 20 30], shape=(3,), dtype=int64), dense_shape=tf.Tensor([5], shape=(1,), dtype=int64))
Пример
Давайте преобразуем полученный разреженный тензор
в плотный с помощью метода to_dense:
import tensorflow as tf
example = tf.train.Example(
features=tf.train.Features(
feature={
'index': tf.train.Feature(
int64_list=tf.train.Int64List(value=[1, 3])
),
'value': tf.train.Feature(
int64_list=tf.train.Int64List(value=[7, 9])
)
}
)
)
serialized = example.SerializeToString()
feature_spec = {
'sparse': tf.io.SparseFeature(
index_key='index',
value_key='value',
dtype=tf.int64,
size=5
)
}
res = tf.io.parse_example(serialized, feature_spec)
dense = tf.sparse.to_dense(res['sparse'])
print(dense)
Результат выполнения кода:
tf.Tensor([[0 7 0 9 0]], shape=(1, 5), dtype=int64)
Смотрите также
-
функцию
parse_example,
которая разбирает сериализованные примеры в тензоры -
класс
VarLenFeature,
который описывает признак переменной длины -
класс
FixedLenFeature,
который описывает признак фиксированной длины -
класс
FixedLenSequenceFeature,
который описывает последовательность фиксированной длины