Spec-Zone.ru › TensorFlow

tf.Tensor

tf.Tensor представляет собой многомерный массив элементов.

Просмотреть псевдонимы

Основные псевдонимы

tf.experimental.numpy.ndarray

Совместимые псевдонимы для миграции

Подробнее см. в руководстве по миграции.

tf.compat.v1.Tensor

Все элементы имеют один известный тип данных.

При написании программы TensorFlow основным объектом, с которым выполняются операции и который передается между компонентами, является tf.Tensor.

tf.Tensor обладает следующими свойствами:

  • один тип данных (например, float32, int32 или string)
  • форма

TensorFlow поддерживает немедленное выполнение и выполнение графа. При немедленном выполнении операции вычисляются сразу. При выполнении графа строится вычислительный граф для последующего вычисления.

По умолчанию TensorFlow использует немедленное выполнение. В приведенном ниже примере результаты умножения матриц вычисляются сразу.

# Compute some values using a Tensor
c = tf.constant([[1.0, 2.0], [3.0, 4.0]])
d = tf.constant([[1.0, 1.0], [0.0, 1.0]])
e = tf.matmul(c, d)
print(e)
tf.Tensor(
[[1. 3.]
 [3. 7.]], shape=(2, 2), dtype=float32)

Обратите внимание, что при немедленном выполнении может выясниться, что ваши Tensors на самом деле имеют тип EagerTensor. Это внутренняя деталь реализации, но она предоставляет доступ к полезной функции numpy:

type(e)
<class '...ops.EagerTensor'>
print(e.numpy())
  [[1. 3.]
   [3. 7.]]

В TensorFlow tf.function часто используются для определения выполнения графа.

Форма тензора (то есть ранг тензора и размерность каждой оси) не всегда может быть известна полностью. В определениях tf.function форма может быть известна лишь частично.

Большинство операций возвращают тензоры с полностью известной формой, если формы их входных данных также известны полностью. Однако в некоторых случаях форму тензора можно определить только во время выполнения.

Доступен ряд специализированных тензоров: см. tf.Variable, tf.constant, tf.placeholder, tf.sparse.SparseTensor и tf.RaggedTensor.

Предупреждение: при создании тензора из массива NumPy или фрейма данных pandas может быть повторно использован базовый буфер:
a = np.array([1, 2, 3])
b = tf.constant(a)
a[0] = 4
print(b)  # tf.Tensor([4 2 3], shape=(3,), dtype=int64)
Примечание: это деталь реализации, которая может измениться; пользователям не следует полагаться на такое поведение.

Подробнее о тензорах см. в руководстве.

Атрибуты
dtype DType элементов в этом тензоре.
name
ndim
shape Возвращает tf.TensorShape, представляющий форму этого тензора.
t = tf.constant([1,2,3,4,5])
t.shape
TensorShape([5])

tf.Tensor.shape эквивалентен tf.Tensor.get_shape().

В определении tf.function или при создании модели с помощью tf.keras.Input они возвращают форму тензора на этапе построения, которая может быть известна лишь частично.

tf.TensorShape не является тензором. Используйте tf.shape(t), чтобы получить тензор, содержащий форму, вычисленную во время выполнения.

Подробные сведения и примеры см. в разделах tf.Tensor.get_shape() и tf.TensorShape.

Методы

eval

Посмотреть исходный код

eval(
    feed_dict=None, session=None
)

Вычисляет этот тензор в Session.

Примечание: Если вы не используете библиотеки compat.v1, эта функция вам не понадобится (как и feed_dict или Session). При немедленном выполнении (или внутри tf.function) вызывать eval не нужно.

Вызов этого метода выполнит все предшествующие операции, которые формируют входные данные, необходимые для операции, создающей этот тензор.

Примечание: Перед вызовом Tensor.eval() его граф должен быть запущен в сеансе, а сеанс по умолчанию должен быть доступен либо session необходимо указать явно.
Аргументы
feed_dict Словарь, сопоставляющий объекты Tensor со значениями для подачи. Описание допустимых значений для подачи см. в tf.Session.run.
session (Необязательно.) Session, который будет использоваться для вычисления этого тензора. Если он не указан, используется сеанс по умолчанию.
Возвращает
Массив NumPy, соответствующий значению этого тензора.

experimental_ref

Посмотреть исходный код

experimental_ref()

УСТАРЕВШАЯ ФУНКЦИЯ

Устарело: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: используйте вместо нее ref().

get_shape

Посмотреть исходный код

get_shape() -> tf.TensorShape

Возвращает tf.TensorShape, представляющий форму этого тензора.

При немедленном выполнении форма всегда известна полностью.

a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(a.shape)
(2, 3)

tf.Tensor.get_shape() эквивалентен tf.Tensor.shape.

При выполнении в tf.function или создании модели с помощью tf.keras.Input функция Tensor.shape может возвращать частичную форму (включая None для неизвестных измерений). Подробнее см. в разделе tf.TensorShape.

inputs = tf.keras.Input(shape = [10])
# Unknown batch size
print(inputs.shape)
(None, 10)

Форма вычисляется с помощью функций вывода формы, зарегистрированных для каждой tf.Operation.

Возвращаемое значение tf.TensorShape определяется во время построения, без выполнения базового ядра. Это не tf.Tensor. Если вам нужен тензор формы, преобразуйте tf.TensorShape в tf.constant или используйте функцию tf.shape(tensor), которая возвращает форму тензора во время выполнения.

Это полезно для отладки и раннего обнаружения ошибок. Например, при трассировке tf.function операции не выполняются, и формы могут быть неизвестны (подробности см. в руководстве по Concrete Functions).

@tf.function
def my_matmul(a, b):
  result = a@b
  # the `print` executes during tracing.
  print("Result shape: ", result.shape)
  return result

Функции вывода формы распространяют формы настолько, насколько это возможно:

f = my_matmul.get_concrete_function(
  tf.TensorSpec([None,3]),
  tf.TensorSpec([3,5]))
Result shape: (None, 5)

Трассировка может завершиться ошибкой, если обнаружено несоответствие формы:

cf = my_matmul.get_concrete_function(
  tf.TensorSpec([None,3]),
  tf.TensorSpec([4,5]))
Traceback (most recent call last):

ValueError: Dimensions must be equal, but are 3 and 4 for 'matmul' (op:
'MatMul') with input shapes: [?,3], [4,5].

В некоторых случаях выведенная форма может содержать неизвестные измерения. Если вызывающий код располагает дополнительной информацией о значениях этих измерений, для дополнения выведенной формы можно использовать tf.ensure_shape или Tensor.set_shape().

@tf.function
def my_fun(a):
  a = tf.ensure_shape(a, [5, 5])
  # the `print` executes during tracing.
  print("Result shape: ", a.shape)
  return a
cf = my_fun.get_concrete_function(
  tf.TensorSpec([None, None]))
Result shape: (5, 5)
Возвращает
tf.TensorShape, представляющий форму этого тензора.

ref

Посмотреть исходный код

ref()

Возвращает хешируемый объект-ссылку на этот тензор.

Основное назначение этого API — добавлять тензоры в множество или словарь. Мы не можем добавлять тензоры в множество или словарь, поскольку начиная с TensorFlow 2.0 tensor.__hash__() больше недоступен.

Следующий код начиная с версии 2.0 вызовет исключение:

x = tf.constant(5)
y = tf.constant(10)
z = tf.constant(10)
tensor_set = {x, y, z}
Traceback (most recent call last):

TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key.
tensor_dict = {x: 'five', y: 'ten'}
Traceback (most recent call last):

TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key.

Вместо этого можно использовать tensor.ref().

tensor_set = {x.ref(), y.ref(), z.ref()}
x.ref() in tensor_set
True
tensor_dict = {x.ref(): 'five', y.ref(): 'ten', z.ref(): 'ten'}
tensor_dict[y.ref()]
'ten'

Кроме того, объект-ссылка предоставляет функцию .deref(), возвращающую исходный тензор.

x = tf.constant(5)
x.ref().deref()
<tf.Tensor: shape=(), dtype=int32, numpy=5>

set_shape

Посмотреть исходный код

set_shape(
    shape
)

Обновляет форму этого тензора.

Примечание: Рекомендуется использовать tf.ensure_shape вместо Tensor.set_shape, так как tf.ensure_shape лучше выявляет ошибки программирования и позволяет создавать гарантии для оптимизации компилятора.

При немедленном выполнении этот метод выполняет проверку формы. В данном случае формы совпадают:

t = tf.constant([[1,2,3]])
t.set_shape([1, 3])

Передача None в новой форме допускает любое значение для этой оси:

t.set_shape([1,None])

Если передана несовместимая форма, возникает ошибка.

t.set_shape([1,5])
Traceback (most recent call last):

ValueError: Tensor's shape (1, 3) is not compatible with supplied
shape [1, 5]

При выполнении в tf.function или создании модели с помощью tf.keras.Input функция Tensor.set_shape объединяет заданный shape с текущей формой этого тензора и задает тензору объединенное значение формы (подробности см. в разделе tf.TensorShape.merge_with):

t = tf.keras.Input(shape=[None, None, 3])
print(t.shape)
(None, None, None, 3)

Измерения, заданные как None, не обновляются:

t.set_shape([None, 224, 224, None])
print(t.shape)
(None, 224, 224, 3)

Основное применение этого метода — предоставление дополнительной информации о форме, которую нельзя вывести только из графа.

Например, если известно, что все изображения в наборе данных имеют форму [28,28,3], ее можно задать с помощью tf.set_shape:

@tf.function
def load_image(filename):
  raw = tf.io.read_file(filename)
  image = tf.image.decode_png(raw, channels=3)
  # the `print` executes during tracing.
  print("Initial shape: ", image.shape)
  image.set_shape([28, 28, 3])
  print("Final shape: ", image.shape)
  return image

Выполните трассировку функции; подробности см. в руководстве по Concrete Functions.

cf = load_image.get_concrete_function(
    tf.TensorSpec([], dtype=tf.string))
Initial shape:  (None, None, 3)
Final shape: (28, 28, 3)

Аналогично функция tf.io.parse_tensor может возвращать тензор с любой формой; может быть неизвестен даже tf.rank. Если известно, что все сериализованные тензоры будут двумерными, задайте это с помощью set_shape:

@tf.function
def my_parse(string_tensor):
  result = tf.io.parse_tensor(string_tensor, out_type=tf.float32)
  # the `print` executes during tracing.
  print("Initial shape: ", result.shape)
  result.set_shape([None, None])
  print("Final shape: ", result.shape)
  return result

Выполните трассировку функции

concrete_parse = my_parse.get_concrete_function(
    tf.TensorSpec([], dtype=tf.string))
Initial shape:  <unknown>
Final shape:  (None, None)

Проверьте, что все работает:

t = tf.ones([5,3], dtype=tf.float32)
serialized = tf.io.serialize_tensor(t)
print(serialized.dtype)
<dtype: 'string'>
print(serialized.shape)
()
t2 = concrete_parse(serialized)
print(t2.shape)
(5, 3)
Предупреждение: set_shape гарантирует совместимость примененной формы с существующей формой, но не выполняет проверку во время выполнения. Задание неправильных форм может привести к несоответствиям между статически известным графом и фактическими значениями тензоров во время выполнения. Для проверки формы во время выполнения используйте вместо этого tf.ensure_shape. Эта функция также изменяет shape тензора.
# Serialize a rank-3 tensor
t = tf.ones([5,5,5], dtype=tf.float32)
serialized = tf.io.serialize_tensor(t)
# The function still runs, even though it `set_shape([None,None])`
t2 = concrete_parse(serialized)
print(t2.shape)
(5, 5, 5)
Аргументы
shape TensorShape, представляющий форму этого тензора, TensorShapeProto, список, кортеж или None.
Вызывает исключение
ValueError Если shape несовместим с текущей формой этого тензора.

__abs__

Посмотреть исходный код

__abs__(
    name=None
)

__add__

Посмотреть исходный код

__add__(
    y
)

__and__

Посмотреть исходный код

__and__(
    y
)

__array__

Посмотреть исходный код

__array__(
    dtype=None
)

__bool__

Посмотреть исходный код

__bool__()

Вспомогательный метод, который предотвращает использование тензора в качестве значения bool в Python.

Это переопределение вызывает TypeError, когда пользователь случайно использует Tensor как логическое значение (чаще всего в операторе if или while) в коде, не преобразованном AutoGraph. Например:

if tf.constant(True):  # Will raise.
  # ...

if tf.constant(5) < tf.constant(7):  # Will raise.
  # ...
Вызывает исключение
TypeError.

__div__

Посмотреть исходный код

__div__(
    y
)

__eq__

Посмотреть исходный код

__eq__(
    other
)

__floordiv__

Посмотреть исходный код

__floordiv__(
    y
)

__ge__

__ge__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает истинность выражения (x >= y).

Примечание: math.greater_equal поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь

Пример:

x = tf.constant([5, 4, 6, 7])
y = tf.constant([5, 2, 5, 10])
tf.math.greater_equal(x, y) ==> [True, True, True, False]

x = tf.constant([5, 4, 6, 7])
y = tf.constant([5])
tf.math.greater_equal(x, y) ==> [True, False, True, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__getitem__

Посмотреть исходный код

__getitem__(
    slice_spec, var=None
)

Переопределение для Tensor.getitem.

Эта операция извлекает из тензора указанную область. Обозначение аналогично NumPy, но в настоящее время поддерживается только базовая индексация. Это означает, что сейчас нельзя использовать в качестве входных данных тензор, не являющийся скаляром.

Несколько полезных примеров:

# Strip leading and trailing 2 elements
foo = tf.constant([1,2,3,4,5,6])
print(foo[2:-2])  # => [3,4]

# Skip every other row and reverse the order of the columns
foo = tf.constant([[1,2,3], [4,5,6], [7,8,9]])
print(foo[::2,::-1])  # => [[3,2,1], [9,8,7]]

# Use scalar tensors as indices on both dimensions
print(foo[tf.constant(0), tf.constant(2)])  # => 3

# Insert another dimension
foo = tf.constant([[1,2,3], [4,5,6], [7,8,9]])
print(foo[tf.newaxis, :, :]) # => [[[1,2,3], [4,5,6], [7,8,9]]]
print(foo[:, tf.newaxis, :]) # => [[[1,2,3]], [[4,5,6]], [[7,8,9]]]
print(foo[:, :, tf.newaxis]) # => [[[1],[2],[3]], [[4],[5],[6]],
[[7],[8],[9]]]

# Ellipses (3 equivalent operations)
foo = tf.constant([[1,2,3], [4,5,6], [7,8,9]])
print(foo[tf.newaxis, :, :])  # => [[[1,2,3], [4,5,6], [7,8,9]]]
print(foo[tf.newaxis, ...])  # => [[[1,2,3], [4,5,6], [7,8,9]]]
print(foo[tf.newaxis])  # => [[[1,2,3], [4,5,6], [7,8,9]]]

# Masks
foo = tf.constant([[1,2,3], [4,5,6], [7,8,9]])
print(foo[foo > 2])  # => [3, 4, 5, 6, 7, 8, 9]
Примечания
  • tf.newaxis работает так же, None, как и в NumPy.
  • В конец slice_spec добавляется неявное многоточие.
  • Расширенная индексация NumPy в настоящее время не поддерживается.
Назначение в API
Этот метод представлен в API TensorFlow, чтобы разработчики библиотек могли регистрировать диспетчеризацию для Tensor.getitem и обеспечивать поддержку пользовательских составных тензоров и других пользовательских объектов.

Этот символ API не предназначен для непосредственного вызова пользователями, но отображается в сгенерированной документации TensorFlow.

Аргументы
tensor Объект tensor.Tensor.
slice_spec Аргументы для Tensor.getitem.
var При присваивании срезу переменной — объект Variable, срез которого нужно получить (то есть тензор является доступным только для чтения представлением этой переменной).
Возвращает
Соответствующий срез «tensor», заданный параметром «slice_spec».
Вызывает исключение
ValueError Если размер диапазона среза отрицателен.
TypeError Если индексы среза не являются целыми числами, срезом, многоточием, tf.newaxis или скалярными тензорами int32/int64.

__gt__

__gt__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает истинность выражения (x > y).

Примечание: math.greater поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5, 2, 5])
tf.math.greater(x, y) ==> [False, True, True]

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.greater(x, y) ==> [False, False, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__invert__

Посмотреть исходный код

__invert__(
    name=None
)

__iter__

Посмотреть исходный код

__iter__()

__le__

__le__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает истинность выражения (x <= y).

Примечание: math.less_equal поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.less_equal(x, y) ==> [True, True, False]

x = tf.constant([5, 4, 6])
y = tf.constant([5, 6, 6])
tf.math.less_equal(x, y) ==> [True, True, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__len__

Посмотреть исходный код

__len__()

__lt__

__lt__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает истинность выражения (x < y).

Примечание: math.less поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.less(x, y) ==> [False, True, False]

x = tf.constant([5, 4, 6])
y = tf.constant([5, 6, 7])
tf.math.less(x, y) ==> [False, True, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__matmul__

Посмотреть исходный код

__matmul__(
    y
)

__mod__

Просмотреть исходный код

__mod__(
    y
)

__mul__

Просмотреть исходный код

__mul__(
    y
)

__ne__

Просмотреть исходный код

__ne__(
    other
)

__neg__

__neg__(
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Вычисляет отрицательное значение для каждого элемента.

То есть \(y = -x\).

Аргументы
x Объект Tensor. Должен иметь один из следующих типов: bfloat16, half, float32, float64, int8, int16, int32, int64, complex64, complex128.
name Имя операции (необязательно).
Возвращает
Объект Tensor. Имеет тот же тип, что и x.

Если x — это SparseTensor, возвращает SparseTensor(x.indices, tf.math.negative(x.values, ...), x.dense_shape)

__nonzero__

Просмотреть исходный код

__nonzero__()

Вспомогательный метод, не позволяющий использовать тензор в качестве bool Python.

Это аналог __bool__() выше для Python 2.x.

Вызывает исключение
TypeError.

__or__

Просмотреть исходный код

__or__(
    y
)

__pow__

Просмотреть исходный код

__pow__(
    y
)

__radd__

Просмотреть исходный код

__radd__(
    x
)

__rand__

Просмотреть исходный код

__rand__(
    x
)

__rdiv__

Просмотреть исходный код

__rdiv__(
    x
)

__rfloordiv__

Просмотреть исходный код

__rfloordiv__(
    x
)

__rmatmul__

Просмотреть исходный код

__rmatmul__(
    x
)

__rmod__

Просмотреть исходный код

__rmod__(
    x
)

__rmul__

Просмотреть исходный код

__rmul__(
    x
)

__ror__

Просмотреть исходный код

__ror__(
    x
)

__rpow__

Просмотреть исходный код

__rpow__(
    x
)

__rsub__

Просмотреть исходный код

__rsub__(
    x
)

__rtruediv__

Просмотреть исходный код

__rtruediv__(
    x
)

__rxor__

Просмотреть исходный код

__rxor__(
    x
)

__sub__

Просмотреть исходный код

__sub__(
    y
)

__truediv__

Просмотреть исходный код

__truediv__(
    y
)

__xor__

Просмотреть исходный код

__xor__(
    y
)
Переменные класса
OVERLOADABLE_OPERATORS
{
 '__abs__',
 '__add__',
 '__and__',
 '__div__',
 '__eq__',
 '__floordiv__',
 '__ge__',
 '__getitem__',
 '__gt__',
 '__invert__',
 '__le__',
 '__lt__',
 '__matmul__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__or__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdiv__',
 '__rfloordiv__',
 '__rmatmul__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__rpow__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__sub__',
 '__truediv__',
 '__xor__'
}

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/Tensor

Spec-Zone.ru

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