當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。