x = tf.compat.v1.placeholder(tf.int32)
print(x.shape)
==> TensorShape(None)
y = x * 2
print(y.shape)
==> TensorShape(None)
y = tf.ensure_shape(y, (None, 3, 3))
print(y.shape)
==> TensorShape([Dimension(None), Dimension(3), Dimension(3)])
with tf.compat.v1.Session() as sess:
# Raises tf.errors.InvalidArgumentError, because the shape (3,) is not
# compatible with the shape (None, 3, 3)
sess.run(y, feed_dict={x: [1, 2, 3]})
Примечание: Это отличается от Tensor.set_shape тем, что устанавливает статическую форму результирующего тензора и принуждает к ней во время выполнения, вызывая ошибку, если форма тензора во время выполнения несовместима со заданной формой. Tensor.set_shape устанавливает статическую форму тензора без принудительного применения во время выполнения, что может привести к несоответствиям между статически известной формой тензоров и значением формы тензоров во время выполнения.
Аргументы
x
Tensor.
shape
TensorShape представляющее форму этого тензора, TensorShapeProto, список, кортеж или None.
name
Имя для этой операции (необязательно). По умолчанию "EnsureShape".
Возвращаемое значение
Tensor. Имеет тот же тип и содержимое, что и x. Во время выполнения генерирует исключение tf.errors.InvalidArgumentError, если shape несовместим с формой x.