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


Python tf.TensorArray用法及代碼示例


類包裝 dynamic-sized、per-time-step、write-once 張量數組。

用法

tf.TensorArray(
    dtype, size=None, dynamic_size=None, clear_after_read=None,
    tensor_array_name=None, handle=None, flow=None, infer_shape=True,
    element_shape=None, colocate_with_first_write_call=True, name=None
)

參數

  • dtype (必需)TensorArray 的數據類型。
  • size (可選)int32 scalar Tensor:TensorArray 的大小。如果未提供句柄,則為必需。
  • dynamic_size (可選)Python bool:如果為 true,則寫入 TensorArray 可以使 TensorArray 超過其初始大小。默認值:假。
  • clear_after_read 布爾值(可選,默認值:True)。如果為 True,請在讀取 TensorArray 值後清除它們。這會禁用 read-many 語義,但允許提前釋放內存。
  • tensor_array_name (可選)Python 字符串:TensorArray 的名稱。這在創建 TensorArray 句柄時使用。如果設置了此值,則句柄應為無。
  • handle (可選)現有 TensorArray 的 Tensor 句柄。如果已設置,tensor_array_name 應為無。僅在圖形模式下支持。
  • flow (可選)來自現有 TensorArray.flow 的浮點 Tensor 標量。僅在圖形模式下支持。
  • infer_shape (可選,默認值:True)如果為 True,則啟用形狀推斷。在這種情況下,所有元素必須具有相同的形狀。
  • element_shape (可選,默認值:無)TensorShape 對象,指定 TensorArray 的每個元素的形狀約束。不需要完全定義。
  • colocate_with_first_write_call 如果 True ,則 TensorArray 將與首次寫入時使用的 Tensor 位於同一設備上(寫入操作包括 write , unstacksplit )。如果 False ,則 TensorArray 將放置在由初始化期間可用的設備上下文確定的設備上。
  • name 操作的名稱(可選)。

拋出

  • ValueError 如果同時提供了句柄和tensor_array_name。
  • TypeError 如果提供了句柄但不是張量。

屬性

  • dtype 此 TensorArray 的數據類型。
  • dynamic_size Python 布爾值;如果True TensorArray 可以動態增長。
  • element_shape 此 TensorArray 中元素的 tf.TensorShape
  • flow Tensor 強製操作導致此 TensorArray 狀態。
  • handle 對 TensorArray 的引用。

此類旨在與動態迭代原語一起使用,例如 while_loopmap_fn 。它通過特殊的"flow"控製流依賴支持漸變back-propagation。

示例1:簡單的閱讀和寫作。

ta = tf.TensorArray(tf.float32, size=0, dynamic_size=True, clear_after_read=False)
ta = ta.write(0, 10)
ta = ta.write(1, 20)
ta = ta.write(2, 30)

ta.read(0)
<tf.Tensor:shape=(), dtype=float32, numpy=10.0>
ta.read(1)
<tf.Tensor:shape=(), dtype=float32, numpy=20.0>
ta.read(2)
<tf.Tensor:shape=(), dtype=float32, numpy=30.0>
ta.stack()
<tf.Tensor:shape=(3,), dtype=float32, numpy=array([10., 20., 30.],
dtype=float32)>

示例 2:循環寫入然後返回的斐波那契序列算法。

@tf.function
def fibonacci(n):
  ta = tf.TensorArray(tf.float32, size=0, dynamic_size=True)
  ta = ta.unstack([0., 1.])

  for i in range(2, n):
    ta = ta.write(i, ta.read(i - 1) + ta.read(i - 2))

  return ta.stack()

fibonacci(7)
<tf.Tensor:shape=(7,), dtype=float32,
numpy=array([0., 1., 1., 2., 3., 5., 8.], dtype=float32)>

示例 3:與 tf.Variable 交互的簡單循環。

v = tf.Variable(1)
@tf.function
def f(x):
  ta = tf.TensorArray(tf.int32, size=0, dynamic_size=True)
  for i in tf.range(x):
    v.assign_add(i)
    ta = ta.write(i, v)
  return ta.stack()
f(5)
<tf.Tensor:shape=(5,), dtype=int32, numpy=array([ 1,  2,  4,  7, 11],
dtype=int32)>

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.TensorArray。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。