Spec-Zone.ru › TensorFlow 2.9

tf.constant

Просмотр исходного кода на GitHub

Создаёт тензор-константу из объекта, подобного тензору.

tf.constant(
    value, dtype=None, shape=None, name='Const'
)
Примечание: Все значения Eager тензоров неизменяемы (в отличие от tf.Variable). В значении, возвращаемом функцией tf.constant, нет ничего особенного в том, что оно постоянно. Эта функция не принципиально отличается от tf.convert_to_tensor. Название tf.constant происходит от того, что значение value встроено в узел Const в tf.Graph. tf.constant полезна для утверждения, что значение может быть встроено таким образом.

Если аргумент dtype не указан, тип определяется по типу value.

# Constant 1-D Tensor from a python list.
tf.constant([1, 2, 3, 4, 5, 6])
<tf.Tensor: shape=(6,), dtype=int32,
    numpy=array([1, 2, 3, 4, 5, 6], dtype=int32)>
# Or a numpy array
a = np.array([[1, 2, 3], [4, 5, 6]])
tf.constant(a)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
  array([[1, 2, 3],
         [4, 5, 6]])>

Если dtype указан, значения результирующего тензора преобразуются к запрошенному типу dtype.

tf.constant([1, 2, 3, 4, 5, 6], dtype=tf.float64)
<tf.Tensor: shape=(6,), dtype=float64,
    numpy=array([1., 2., 3., 4., 5., 6.])>

Если shape задан, то value переформатируется для соответствия. Скаляры расширяются, чтобы заполнить shape:

tf.constant(0, shape=(2, 3))
  <tf.Tensor: shape=(2, 3), dtype=int32, numpy=
  array([[0, 0, 0],
         [0, 0, 0]], dtype=int32)>
tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
  array([[1, 2, 3],
         [4, 5, 6]], dtype=int32)>

tf.constant не имеет эффекта, если в качестве value передаётся Eager тензор, и даже передаёт градиенты:

v = tf.Variable([0.0])
with tf.GradientTape() as g:
    loss = tf.constant(v + v)
g.gradient(loss, v).numpy()
array([2.], dtype=float32)

Однако, поскольку tf.constant встраивает значение в tf.Graph, это не работает для символических тензоров:

with tf.compat.v1.Graph().as_default():
  i = tf.compat.v1.placeholder(shape=[None, None], dtype=tf.float32)
  t = tf.constant(i)
Traceback (most recent call last):

TypeError: ...

tf.constant создаст тензоры на текущем устройстве. Входные данные, которые уже являются тензорами, сохраняют свои расположения неизменными.

Связанные операции:

  • tf.convert_to_tensor аналогична, но:
    • У неё нет аргумента shape.
    • Символические тензоры могут проходить без изменений.
with tf.compat.v1.Graph().as_default():
  i = tf.compat.v1.placeholder(shape=[None, None], dtype=tf.float32)
  t = tf.convert_to_tensor(i)
  
  • tf.fill: отличается несколькими способами:
    • tf.constant поддерживает произвольные константы, а не только однородные скалярные тензоры, как tf.fill.
    • tf.fill создаёт операцию в графе, которая расширяется во время выполнения, поэтому она может эффективно представлять большие тензоры.
    • Поскольку tf.fill не встраивает значение, она может создавать выходные данные с динамически изменяемыми размерами.
Аргументы
value Постоянное значение (или список) выходного типа dtype.
dtype Тип элементов результирующего тензора.
shape Необязательные размеры результирующего тензора.
name Необязательное имя тензора.
Возвращаемое значение
Тензор-константа.
Исключения
TypeError если форма задана неправильно или не поддерживается.
ValueError если вызвана на символическом тензоре.

© 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/versions/r2.9/api_docs/python/tf/constant

Spec-Zone.ru

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