Метод from_tensors
Метод from_tensors класса Dataset создает датасет из переданных тензоров.
Первым параметром метод принимает тензор или кортеж тензоров.
Особенность метода в том, что весь переданный тензор становится одним элементом датасета,
а не разбивается на отдельные элементы, как это делает метод from_tensor_slices.
Вторым необязательным параметром можно передать имя для датасета.
Синтаксис
tf.data.Dataset.from_tensors(tensors, [name])
Пример
Давайте создадим датасет из одного тензора и посмотрим на его содержимое:
import tensorflow as tf
t = tf.constant([1, 2, 3, 4, 5])
ds = tf.data.Dataset.from_tensors(t)
for elem in ds:
print(elem)
Результат выполнения кода:
tf.Tensor([1 2 3 4 5], shape=(5,), dtype=int32)
Как видим, весь тензор целиком стал единственным элементом датасета.
Пример
Давайте создадим датасет из кортежа двух тензоров:
import tensorflow as tf
t1 = tf.constant([1, 2, 3])
t2 = tf.constant([4, 5, 6])
ds = tf.data.Dataset.from_tensors((t1, t2))
for elem in ds:
print(elem)
Результат выполнения кода:
(<tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, <tf.Tensor: shape=(3,), dtype=int32, numpy=array([4, 5, 6], dtype=int32)>)
Каждый элемент датасета представляет собой кортеж из двух тензоров.
Пример
Давайте создадим датасет из двумерного тензора:
import tensorflow as tf
t = tf.constant([[1, 2, 3], [4, 5, 6]])
ds = tf.data.Dataset.from_tensors(t)
for elem in ds:
print(elem)
Результат выполнения кода:
tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)
Двумерный тензор также стал одним элементом датасета.
Пример
Давайте сравним поведение методов from_tensors и from_tensor_slices на одном и том же тензоре:
import tensorflow as tf
t = tf.constant([1, 2, 3, 4, 5])
ds_tensors = tf.data.Dataset.from_tensors(t)
ds_slices = tf.data.Dataset.from_tensor_slices(t)
print("from_tensors:")
for elem in ds_tensors:
print(elem)
print("from_tensor_slices:")
for elem in ds_slices:
print(elem)
Результат выполнения кода:
from_tensors:
tf.Tensor([1 2 3 4 5], shape=(5,), dtype=int32)
from_tensor_slices:
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)
tf.Tensor(3, shape=(), dtype=int32)
tf.Tensor(4, shape=(), dtype=int32)
tf.Tensor(5, shape=(), dtype=int32)
Метод from_tensors создал один элемент, а метод from_tensor_slices разбил тензор на пять элементов.
Пример
Давайте создадим датасет с именем и проверим его размер:
import tensorflow as tf
t = tf.constant([1, 2, 3, 4, 5])
ds = tf.data.Dataset.from_tensors(t, name="my_dataset")
print(ds.cardinality().numpy())
Результат выполнения кода:
1
Датасет всегда содержит ровно один элемент, независимо от размера переданного тензора.
Смотрите также
-
класс
Dataset,
который представляет собой набор элементов -
метод
from_tensor_slices,
который разбивает тензор на отдельные элементы -
метод
from_generator,
который создает датасет из генератора -
метод
range,
который создает датасет из диапазона чисел