Spec-Zone.ru › TensorFlow 2.3

tf.constant

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

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

tf.constant(
    value, dtype=None, shape=None, name='Const'
)
Примечание: Все значения в режиме eager tf.Tensor неизменяемы (в отличие от tf.Variable). Нет ничего особенного в постоянстве значения, возвращаемого функцией tf.constant. Эта функция не принципиально отличается от tf.convert_to_tensor. Название tf.constant происходит из символических API (например, tf.data или keras функциональных моделей), где значение 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, это не работает для символических тензоров:

i = tf.keras.layers.Input(shape=[None, None])
t = tf.constant(i)
Traceback (most recent call last):

NotImplementedError: ...

tf.constant всегда создаёт тензоры на процессоре (хост). Для создания тензоров на других устройствах используйте tf.identity. (Однако, если value является eager тензором, тензор будет возвращён без изменений, как указано выше.)

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

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

© 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.3/api_docs/python/tf/constant

Spec-Zone.ru

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