Spec-Zone.ru › TensorFlow 2.4

tf.ensure_shape

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

Обновляет форму тензора и проверяет во время выполнения, что форма соответствует.

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

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

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

tf.compat.v1.ensure_shape

tf.ensure_shape(
    x, shape, name=None
)

Например:

@tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
def f(tensor):
  return tf.ensure_shape(tensor, [3, 3])

f(tf.zeros([3, 3])) # Passes
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float32)>
f([1, 2, 3]) # fails
Traceback (most recent call last):

InvalidArgumentError:  Shape of tensor x [3] is not compatible with expected shape [3,3].

В приведенном выше примере возникает tf.errors.InvalidArgumentError, так как форма (3,) несовместима с формой (None, 3, 3)

При выполнении с нетерпеливым выполнением это утверждение формы, которое возвращает входной параметр:

x = tf.constant([1,2,3])
print(x.shape)
(3,)
x = tf.ensure_shape(x, [3])
x = tf.ensure_shape(x, [5])
Traceback (most recent call last):

tf.errors.InvalidArgumentError: Shape of tensor dummy_input [3] is not
  compatible with expected shape [5]. [Op:EnsureShape]

Внутри контекста tf.function или v1.Graph он проверяет форму во время компиляции и во время выполнения. Это более строго, чем tf.Tensor.set_shape, который проверяет только форму во время компиляции.

Примечание: Это отличается от tf.Tensor.set_shape тем, что устанавливает статическую форму результирующего тензора и проверяет ее во время выполнения, генерируя ошибку, если форма тензора во время выполнения несовместима с заданной формой. tf.Tensor.set_shape устанавливает статическую форму тензора без проверки во время выполнения, что может привести к несоответствиям между статически известной формой тензоров и значением тензоров во время выполнения.

Например, загрузки изображений известного размера:

@tf.function
def decode_image(png):
  image = tf.image.decode_png(png, channels=3)
  # the `print` executes during tracing.
  print("Initial shape: ", image.shape)
  image = tf.ensure_shape(image,[28, 28, 3])
  print("Final shape: ", image.shape)
  return image

При отслеживании функции операции не выполняются, формы могут быть неизвестны. Подробности см. в Руководстве по конкретным функциям.

concrete_decode = decode_image.get_concrete_function(
    tf.TensorSpec([], dtype=tf.string))
Initial shape:  (None, None, 3)
Final shape:  (28, 28, 3)
image = tf.random.uniform(maxval=255, shape=[28, 28, 3], dtype=tf.int32)
image = tf.cast(image,tf.uint8)
png = tf.image.encode_png(image)
image2 = concrete_decode(png)
print(image2.shape)
(28, 28, 3)
image = tf.concat([image,image], axis=0)
print(image.shape)
(56, 28, 3)
png = tf.image.encode_png(image)
image2 = concrete_decode(png)
Traceback (most recent call last):

tf.errors.InvalidArgumentError:  Shape of tensor DecodePng [56,28,3] is not
  compatible with expected shape [28,28,3].
Внимание: если вы не используете результат tf.ensure_shape, проверка может не выполняться.
@tf.function
def bad_decode_image(png):
  image = tf.image.decode_png(png, channels=3)
  # the `print` executes during tracing.
  print("Initial shape: ", image.shape)
  # BAD: forgot to use the returned tensor.
  tf.ensure_shape(image,[28, 28, 3])
  print("Final shape: ", image.shape)
  return image
image = bad_decode_image(png)
Initial shape:  (None, None, 3)
Final shape:  (None, None, 3)
print(image.shape)
(56, 28, 3)
Аргументы
x Tensor.
shape TensorShape представляющая форму этого тензора, TensorShapeProto, список, кортеж или None.
name Имя данной операции (необязательно). По умолчанию "EnsureShape".
Возвращает
Tensor. Имеет тот же тип и содержимое, что и x.
Возбуждает
tf.errors.InvalidArgumentError Если shape несовместима с формой x.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/ensure_shape

Spec-Zone.ru

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