Spec-Zone.ru › TensorFlow

tf.TensorShape

Представляет форму Tensor.

Наследуется от: TraceType

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

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

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

tf.compat.v1.TensorShape

tf.TensorShape(
    dims
)

Используется в блокнотах

Используется в руководстве Используется в учебных материалах
  • TensorFlow 1.x и TensorFlow 2: поведение и API
  • Основные понятия DTensor
  • Работа с RNN
  • Распределенный ввод данных
  • Наборы данных TensorFlow из коллекций MongoDB
t = tf.constant([[1,2,3],[4,5,6]])
t.shape
TensorShape([2, 3])

TensorShape — это статическое представление формы тензора. При выполнении в eager-режиме форма тензора всегда полностью определена, но при трассировке tf.function она может быть одной из следующих:

  • Полностью известная форма: известно число измерений и размер каждого измерения. Например, TensorShape([16, 256])
  • Частично известная форма: известно число измерений, но размер одного или нескольких измерений неизвестен. Например, TensorShape([None, 256])
  • Неизвестная форма: неизвестно число измерений и размер всех измерений. Например, TensorShape(None)

Во время трассировки функции t.shape вернет объект TensorShape, представляющий форму тензора в том виде, в каком она известна во время трассировки. Это статическое представление будет определено лишь частично в случаях, когда точная форма зависит от значений внутри тензоров. Чтобы получить динамическое представление, используйте tf.shape(t), которая вернет тензор, представляющий полностью определенную форму t. Так можно выразить логику, изменяющую формы тензоров, создавая другие тензоры, зависящие от динамической формы t.

Примечание: tf.RaggedTensor.shape также возвращает tf.TensorShape; длины любых неоднородных измерений неизвестны (None).

Например, эта функция выводит TensorShape' (t.shape), when you trace the function, and returns a tensor <a href="../tf/shape"><code>tf.shape(t)</code></a> for given inputt`:

@tf.function
def get_dynamic_shape(t):
  print("tracing...")
  print(f"static shape is {t.shape}")
  return tf.shape(t)

Простой вызов функции трассирует ее с полностью заданной статической формой:

result = get_dynamic_shape(tf.constant([[1, 1, 1], [0, 0, 0]]))
tracing...
static shape is (2, 3)
result.numpy()
array([2, 3], dtype=int32)

Однако tf.function также может трассировать функцию с частично заданной (или даже не заданной) формой:

cf1 = get_dynamic_shape.get_concrete_function(tf.TensorSpec(
                                              shape=[None, 2]))
tracing...
static shape is (None, 2)
cf1(tf.constant([[1., 0],[1, 0],[1, 0]])).numpy()
array([3, 2], dtype=int32)
cf2 = get_dynamic_shape.get_concrete_function(tf.TensorSpec(shape=None))
tracing...
static shape is <unknown>
cf2(tf.constant([[[[[1., 0]]]]])).numpy()
array([1, 1, 1, 1, 2], dtype=int32)

Если тензор создан операцией типа "Foo", его форма может быть выведена, если для "Foo" зарегистрирована функция формы. Подробную информацию о функциях формы и их регистрации см. в разделе Функции формы. Кроме того, можно явно задать форму с помощью tf.Tensor.ensure_shape.

Аргументы
dims Список измерений или None, если форма не задана.
Исключения
TypeError Если dims нельзя преобразовать в список измерений.
Атрибуты
dims Устарело. Возвращает список измерений этой формы.

Рекомендуется использовать TensorShape.as_list.

ndims Устаревший метод доступа к rank.
rank Возвращает ранг этой формы или None, если он не задан.

Методы

as_list

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

as_list()

Возвращает список целых чисел или None для каждого измерения.

Возвращает
Список целых чисел или None для каждого измерения.
Исключения
ValueError Если self — неизвестная форма с неизвестным рангом.

as_proto

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

as_proto()

Возвращает эту форму в виде TensorShapeProto.

assert_has_rank

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

assert_has_rank(
    rank
)

Вызывает исключение, если self несовместима с заданным rank.

Аргументы
rank Целое число.
Исключения
ValueError Если self не представляет форму с заданным rank.

assert_is_compatible_with

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

assert_is_compatible_with(
    other
)

Вызывает исключение, если self и other не представляют одну и ту же форму.

Этот метод можно использовать, чтобы проверить, существует ли форма, которую представляют и self, и other.

Аргументы
other Другая TensorShape.
Исключения
ValueError Если self и other не представляют одну и ту же форму.

assert_is_fully_defined

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

assert_is_fully_defined()

Вызывает исключение, если self определена не полностью во всех измерениях.

Исключения
ValueError Если для self неизвестно значение хотя бы одного измерения.

assert_same_rank

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

assert_same_rank(
    other
)

Вызывает исключение, если ранги self и other несовместимы.

Аргументы
other Другая TensorShape.
Исключения
ValueError Если self и other представляют формы с разными рангами.

concatenate

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

concatenate(
    other
)

Возвращает результат объединения измерений в self и other.

Примечание: Если self или other полностью неизвестна, при объединении информация о другой форме будет потеряна. В будущем мы, возможно, добавим поддержку объединения с сохранением этой информации для использования при срезах.
Аргументы
other Другая TensorShape.
Возвращает
TensorShape, измерения которой являются результатом объединения измерений в self и other.

experimental_as_proto

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

experimental_as_proto() -> tensor_shape_pb2.TensorShapeProto

Возвращает представление экземпляра TensorShape в формате proto.

experimental_from_proto

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

@classmethod
experimental_from_proto(
    proto: tensor_shape_pb2.TensorShapeProto
) -> 'TensorShape'

Возвращает экземпляр TensorShape на основе сериализованного proto.

experimental_type_proto

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

@classmethod
experimental_type_proto() -> Type[tensor_shape_pb2.TensorShapeProto]

Возвращает тип proto, используемый для сериализации TensorShape.

is_compatible_with

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

is_compatible_with(
    other
)

Возвращает True тогда и только тогда, когда self совместима с other.

Две формы, возможно определенные не полностью, совместимы, если существует полностью определенная форма, которую могут представлять обе формы. Благодаря этому отношение совместимости позволяет коду вывода форм работать с частично определенными формами. Например:

  • TensorShape(None) совместима со всеми формами.

  • TensorShape([None, None]) совместима со всеми двумерными формами, например TensorShape([32, 784]), а также с TensorShape(None). Она несовместима, например, с TensorShape([None]) или TensorShape([None, None, None]).

  • TensorShape([32, None]) совместима со всеми двумерными формами, у которых размер нулевого измерения равен 32, а также с TensorShape([None, None]) и TensorShape(None). Она несовместима, например, с TensorShape([32]), TensorShape([32, None, 1]) или TensorShape([64, None]).

  • TensorShape([32, 784]) совместима с самой собой, а также с TensorShape([32, None]), TensorShape([None, 784]), TensorShape([None, None]) и TensorShape(None). Она несовместима, например, с TensorShape([32, 1, 784]) или TensorShape([None]).

Отношение совместимости рефлексивно и симметрично, но не транзитивно. Например, TensorShape([32, 784]) совместима с TensorShape(None), а TensorShape(None) совместима с TensorShape([4, 4]), но TensorShape([32, 784]) несовместима с TensorShape([4, 4]).

Аргументы
other Другая TensorShape.
Возвращает
True тогда и только тогда, когда self совместима с other.

is_fully_defined

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

is_fully_defined()

Возвращает True тогда и только тогда, когда self полностью определена во всех измерениях.

is_subtype_of

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

is_subtype_of(
    other: tf.types.experimental.TraceType
) -> bool

Возвращает True тогда и только тогда, когда self является подтипом other.

Форма A является подтипом формы B, если форма B может ее корректно представлять:

  • TensorShape любого ранга является подтипом TensorShape(None).

  • TensorShape одинакового ранга ковариантны, то есть TensorShape([A1, A2, ..]) является подтипом TensorShape([B1, B2, ..]) тогда и только тогда, когда An является подтипом Bn.

    An является подтипом Bn тогда и только тогда, когда An == Bn или Bn равно None.

  • Между TensorShape с разными заданными рангами нет отношения подтипов.

Отношение подтипов рефлексивно и транзитивно, но не симметрично.

Некоторые примеры:

  • TensorShape([32, 784]) является подтипом TensorShape(None), а TensorShape([4, 4]) также является подтипом TensorShape(None), но TensorShape([32, 784]) и TensorShape([4, 4]) не являются подтипами друг друга.

  • Все двумерные формы являются подтипами TensorShape([None, None]), например TensorShape([32, 784]). Например, с TensorShape([None]) или TensorShape([None, None, None]) отношения подтипов нет.

  • TensorShape([32, None]) также является подтипом TensorShape([None, None]) и TensorShape(None). Она не является подтипом, например, TensorShape([32]), TensorShape([32, None, 1]), TensorShape([64, None]) или TensorShape([None, 32]).

  • TensorShape([32, 784]) является подтипом самой себя, а также TensorShape([32, None]), TensorShape([None, 784]), TensorShape([None, None]) и TensorShape(None). Например, с TensorShape([32, 1, 784]) или TensorShape([None]) отношения подтипов нет.

Аргументы
other Другая TensorShape.
Возвращает
True тогда и только тогда, когда self является подтипом other.

merge_with

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

merge_with(
    other
)

Возвращает TensorShape, объединяющую сведения из self и other.

Измерения в self и other объединяются поэлементно согласно следующим правилам:

Dimension(n).merge_with(Dimension(None)) == Dimension(n)
Dimension(None).merge_with(Dimension(n)) == Dimension(n)
Dimension(None).merge_with(Dimension(None)) == Dimension(None)
# raises ValueError for n != m
Dimension(n).merge_with(Dimension(m))

ts = tf.TensorShape([1,2]) ot1 = tf.TensorShape([1,2]) ts.merge_with(ot).as_list() [1,2]

ot2 = tf.TensorShape([1,None]) ts.merge_with(ot2).as_list() [1,2]

ot3 = tf.TensorShape([None, None]) ot3.merge_with(ot2).as_list() [1, None]

Аргументы
other Другая TensorShape.
Возвращает
TensorShape, содержащая объединенные сведения из self и other.
Исключения
ValueError Если self и other несовместимы.

most_specific_common_supertype

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

most_specific_common_supertype(
    others: Sequence[tf.types.experimental.TraceType]
) -> Optional['TensorShape']

Возвращает наиболее конкретный общий супертип TensorShape для self и others.

  • TensorShape([None, 1]) — наиболее конкретный TensorShape, являющийся супертипом и TensorShape([2, 1]), и TensorShape([5, 1]). Обратите внимание, что TensorShape(None) также является супертипом, но не самым конкретным.

  • TensorShape([1, 2, 3]) — наиболее конкретный TensorShape, являющийся супертипом и TensorShape([1, 2, 3]), и TensorShape([1, 2, 3]). Существуют и другие, менее конкретные TensorShape, являющиеся супертипами указанных выше TensorShape, например TensorShape([1, 2, None]), TensorShape(None).

    • TensorShape([None, None]) — наиболее конкретный TensorShape, являющийся супертипом и TensorShape([2, None]), и TensorShape([None, 3]). Как и всегда, TensorShape(None) также является супертипом, но не самым конкретным.

    • TensorShape(None) — единственный TensorShape, являющийся супертипом и TensorShape([1, 2, 3]), и TensorShape([1, 2]). В общем случае для любых двух форм с разными рангами единственным общим супертипом будет TensorShape(None).

    • TensorShape(None) — единственный TensorShape, являющийся супертипом и TensorShape([1, 2, 3]), и TensorShape(None). В общем случае общим супертипом любой формы с TensorShape(None) будет TensorShape(None).

Аргументы
others Последовательность TensorShape.
Возвращает
TensorShape, являющуюся наиболее конкретной формой-супертипом для self и others. None, если такой формы не существует.

most_specific_compatible_shape

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

most_specific_compatible_shape(
    other
) -> 'TensorShape'

Возвращает наиболее конкретную TensorShape, совместимую с self и other.

  • TensorShape([None, 1]) — наиболее конкретная TensorShape, совместимая и с TensorShape([2, 1]), и с TensorShape([5, 1]). Обратите внимание, что TensorShape(None) также совместима с указанными выше TensorShape.

  • TensorShape([1, 2, 3]) — наиболее конкретная TensorShape, совместимая и с TensorShape([1, 2, 3]), и с TensorShape([1, 2, 3]). С указанными выше TensorShape совместимы и менее конкретные формы, например TensorShape([1, 2, None]) и TensorShape(None).

Аргументы
other Другая TensorShape.
Возвращает
TensorShape, являющуюся наиболее конкретной совместимой формой для self и other.

num_elements

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

num_elements()

Возвращает общее число элементов или none для неполных форм.

with_rank

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

with_rank(
    rank
)

Возвращает форму на основе self с указанным рангом.

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

Аргументы
rank Целое число.
Возвращает
Форму, которая не менее конкретна, чем self, и имеет указанный ранг.
Исключения
ValueError Если self не представляет форму с заданным rank.

with_rank_at_least

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

with_rank_at_least(
    rank
)

Возвращает форму на основе self, ранг которой не меньше заданного.

Аргументы
rank Целое число.
Возвращает
Форму, которая не менее конкретна, чем self, и ранг которой не меньше заданного.
Исключения
ValueError Если self не представляет форму с рангом не меньше заданного rank.

with_rank_at_most

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

with_rank_at_most(
    rank
)

Возвращает форму на основе self, ранг которой не больше заданного.

Аргументы
rank Целое число.
Возвращает
Форму, которая не менее конкретна, чем self, и ранг которой не больше заданного.
Исключения
ValueError Если self не представляет форму с рангом не больше заданного rank.

__add__

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

__add__(
    other
)

__bool__

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

__bool__()

Возвращает True, если эта форма содержит ненулевую информацию.

__concat__

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

__concat__(
    other
)

__eq__

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

__eq__(
    other
)

Возвращает True, если self эквивалентна other.

Сначала выполняется попытка преобразовать other в TensorShape. Если преобразование не удается, возникает исключение TypeError. В противном случае сравнивается каждый элемент измерений TensorShape.

  • Две полностью известные формы: возвращает True, только если каждый элемент равен соответствующему элементу.
>>> t_a = tf.TensorShape([1,2])
>>> a = [1, 2]
>>> t_b = tf.TensorShape([1,2])
>>> t_c = tf.TensorShape([1,2,3])
>>> t_a.__eq__(a)
True
>>> t_a.__eq__(t_b)
True
>>> t_a.__eq__(t_c)
False
  • Две частично известные формы: возвращает True, только если каждый элемент равен соответствующему элементу.
>>> p_a = tf.TensorShape([1,None])
>>> p_b = tf.TensorShape([1,None])
>>> p_c = tf.TensorShape([2,None])
>>> p_a.__eq__(p_b)
True
>>> t_a.__eq__(p_a)
False
>>> p_a.__eq__(p_c)
False
  • Две неизвестные формы: возвращает True.
>>> unk_a = tf.TensorShape(None)
>>> unk_b = tf.TensorShape(None)
>>> unk_a.__eq__(unk_b)
True
>>> unk_a.__eq__(t_a)
False
Аргументы
other TensorShape или тип, который можно преобразовать в TensorShape.
Возвращает
True, если все размеры равны.
Вызывает исключение
TypeError, если other нельзя преобразовать в TensorShape.

__getitem__

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

__getitem__(
    key
)

Возвращает значение измерения или форму в зависимости от ключа.

Аргументы
key Если key — целое число, возвращает измерение по этому индексу; если же key — срез, возвращает TensorShape, размеры которой выбраны из self с помощью этого среза.
Возвращает
Целое число, если key — целое число, или TensorShape, если key — срез.
Вызывает исключение
ValueError Если key — срез, self полностью неизвестна, а шаг задан.

__iter__

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

__iter__()

Возвращает self.dims, если ранг известен, в противном случае вызывает ValueError.

__len__

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

__len__()

Возвращает ранг этой формы или вызывает ValueError, если он не задан.

__nonzero__

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

__nonzero__()

Возвращает True, если эта форма содержит ненулевую информацию.

__radd__

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

__radd__(
    other
)

© 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/TensorShape

Spec-Zone.ru

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