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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。