РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
656 of 824 menu

Класс VarLenFeature

Класс VarLenFeature используется при разборе сериализованных примеров tf.Example для описания признака, который может содержать произвольное число значений. В отличие от FixedLenFeature, где число элементов фиксировано, VarLenFeature возвращает разреженный тензор tf.SparseTensor. Первым параметром передается тип данных dtype элементов признака. Признак переменной длины удобен, когда заранее неизвестно, сколько значений будет в примере.

Синтаксис

tf.io.VarLenFeature(dtype)

Пример

Давайте создадим описание признака переменной длины с типом float32 и разберем сериализованный пример:

import tensorflow as tf feature = tf.io.VarLenFeature(dtype=tf.float32) print(feature)

Результат выполнения кода:

VarLenFeature(dtype=tf.float32)

Пример

Давайте применим VarLenFeature для разбора реального примера с признаком, содержащим несколько значений:

import tensorflow as tf # build a serialized example with a variable-length feature example = tf.train.Example( features=tf.train.Features( feature={ 'values': tf.train.Feature( float_list=tf.train.FloatList(value=[1.0, 2.0, 3.0, 4.0]) ) } ) ) serialized = example.SerializeToString() # parse using VarLenFeature features = { 'values': tf.io.VarLenFeature(dtype=tf.float32) } parsed = tf.io.parse_single_example(serialized, features) res = parsed['values'] print(res)

Результат выполнения кода:

SparseTensor(indices=tf.Tensor( [[0] [1] [2] [3]], shape=(4, 1), dtype=int64), values=tf.Tensor([1. 2. 3. 4.], shape=(4,), dtype=float32), dense_shape=tf.Tensor([4], shape=(1,), dtype=int64))

Пример

Давайте преобразуем полученный разреженный тензор в плотный с помощью метода to_dense:

import tensorflow as tf example = tf.train.Example( features=tf.train.Features( feature={ 'values': tf.train.Feature( float_list=tf.train.FloatList(value=[1.0, 2.0, 3.0]) ) } ) ) serialized = example.SerializeToString() features = { 'values': tf.io.VarLenFeature(dtype=tf.float32) } parsed = tf.io.parse_single_example(serialized, features) res = tf.sparse.to_dense(parsed['values']) print(res)

Результат выполнения кода:

tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32)

Пример

Давайте разберем сразу пакет примеров с помощью функции parse_example и признака переменной длины:

import tensorflow as tf def make_example(values): return tf.train.Example( features=tf.train.Features( feature={ 'values': tf.train.Feature( float_list=tf.train.FloatList(value=values) ) } ) ).SerializeToString() serialized = [ make_example([1.0, 2.0]), make_example([3.0, 4.0, 5.0]) ] features = { 'values': tf.io.VarLenFeature(dtype=tf.float32) } parsed = tf.io.parse_example(serialized, features) print(parsed['values'])

Результат выполнения кода:

SparseTensor(indices=tf.Tensor( [[0 0] [0 1] [1 0] [1 1] [1 2]], shape=(5, 2), dtype=int64), values=tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32), dense_shape=tf.Tensor([2 3], shape=(2,), dtype=int64))

Смотрите также

  • класс FixedLenFeature,
    который описывает признак фиксированной длины
  • функцию parse_single_example,
    которая разбирает один сериализованный пример
  • функцию parse_example,
    которая разбирает пакет сериализованных примеров
  • класс FixedLenSequenceFeature,
    который описывает последовательность фиксированной длины
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить