tf.constant
| Просмотреть исходный код на GitHub |
Создаёт тензор-константу из объекта, подобного тензору.
tf.constant(
value, dtype=None, shape=None, name='Const'
)
Примечание: Все значения в режиме eagertf.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