当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.constant用法及代码示例


从 tensor-like 对象创建一个常量张量。

用法

tf.constant(
    value, dtype=None, shape=None, name='Const'
)

参数

  • value 输出类型为 dtype 的常量值(或列表)。
  • dtype 结果张量的元素类型。
  • shape 结果张量的可选尺寸。
  • name 张量的可选名称。

返回

  • 一个常数张量。

抛出

  • TypeError 如果形状指定不正确或不受支持。
  • ValueError 如果调用符号张量。

注意:所有即刻tf.Tensor值是不可变的(与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)>

如果一个 Eager Tensor 作为 value 传递,tf.constant 无效,它甚至传输梯度:

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 将在当前设备上创建张量。已经是张量的输入保持其位置不变。

相关操作:

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 在图中创建一个在运行时扩展的 Op,因此它可以有效地表示大张量。
    • 由于tf.fill 没有嵌入值,它可以产生动态大小的输出。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.constant。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。