Spec-Zone.ru › TensorFlow

tf.Tensor

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

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

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

tf.experimental.numpy.ndarray

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

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.Tensor

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

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

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

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

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

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

# 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)

Обратите внимание, что во время выполнения в режиме eager вы можете обнаружить, что ваши 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 или DataFrame 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 Количество элементов в этом тензоре.
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). При выполнении в режиме eager (или внутри 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, представляющий форму этого тензора.

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

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 операции не выполняются, формы могут быть неизвестны (см. Руководство по конкретным функциям для получения дополнительных сведений).

@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)
Возвращает
A tf.TensorShape представляющий форму этого тензора.

ref

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

ref()

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

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

Следующее будет вызывать исключение, начиная с версии 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

Отслеживайте функцию, см. Руководство по конкретным функциям для получения подробностей.

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 неизвестна. Если вы знаете, что все ваши сериализованные тензоры будут 2d, установите её с помощью 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 A TensorShape представляющий форму этого тензора, a TensorShapeProto, список, кортеж или None.
Возбуждает
ValueError Если shape несовместима с текущей формой этого тензора.

__abs__

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

__abs__(
    name=None
)

__add__

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

__add__(
    y
)

__and__

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

__and__(
    y
)

__array__

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

__array__(
    dtype=None
)

__bool__

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

__bool__()

Метод-заглушка для предотвращения использования тензора в качестве Python bool.

Эта перегрузка вызывает 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 A Tensor. Должен быть одним из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
A 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 A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A 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 A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A 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 A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A 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 A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, int8, int16, int32, int64, complex64, complex128.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor. Имеет тот же тип, что и x.

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

__nonzero__

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

__nonzero__()

Метод-заглушка, чтобы предотвратить использование тензора как Python-объекта.

Это аналог метода Python 2.x __bool__().

Исключения
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