类包装 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 scalarTensor
: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
,unstack
和split
)。如果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_loop
和 map_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)>
相关用法
- Python tf.TensorArray.stack用法及代码示例
- Python tf.Tensor.__rsub__用法及代码示例
- Python tf.TensorSpec.from_spec用法及代码示例
- Python tf.Tensor.__lt__用法及代码示例
- Python tf.Tensor.set_shape用法及代码示例
- Python tf.Tensor.__abs__用法及代码示例
- Python tf.Tensor用法及代码示例
- Python tf.Tensor.ref用法及代码示例
- Python tf.Tensor.__getitem__用法及代码示例
- Python tf.Tensor.__ge__用法及代码示例
- Python tf.TensorSpec.from_tensor用法及代码示例
- Python tf.TensorShape.merge_with用法及代码示例
- Python tf.Tensor.__rmatmul__用法及代码示例
- Python tf.TensorShape.__eq__用法及代码示例
- Python tf.Tensor.__bool__用法及代码示例
- Python tf.Tensor.get_shape用法及代码示例
- Python tf.Tensor.__xor__用法及代码示例
- Python tf.Tensor.__sub__用法及代码示例
- Python tf.Tensor.__rpow__用法及代码示例
- Python tf.Tensor.__gt__用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.TensorArray。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。