此页面由 Cloud Translation API 翻译。
Switch to English

tf.TensorArray

TensorFlow 1版本 在GitHub上查看源代码

类包装动态大小的,按时间划分的一次写入Tensor数组。

用于笔记本

在指南中使用在教程中使用

此类应与动态迭代原语(如while_loopmap_fn 。它通过特殊的“流”控制流相关性支持梯度反向传播。

示例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)>

dtype (必需)TensorArray的数据类型。
size (可选)int32标量Tensor :TensorArray的大小。如果未提供手柄,则为必需。
dynamic_size (可选)Python bool:如果为true,则写入TensorArray可使TensorArray超出其初始大小。默认值:False。
clear_after_read 布尔值(可选,默认值:True)。如果为True,则在读取它们后清除TensorArray值。这将禁用多次读取语义,但允许提前释放内存。
tensor_array_name (可选)Python字符串:TensorArray的名称。在创建TensorArray手柄时使用。如果设置了此值,则句柄应为“无”。
handle (可选)现有TensorArray的Tensor句柄。如果已设置,则tensor_array_name应该为None。仅在图形模式下受支持。
flow (可选)来自现有TensorArray.flow浮点Tensor标量。仅在图形模式下受支持。
infer_shape (可选,默认值:True)如果为True,则启用形状推断。在这种情况下,所有元素必须具有相同的形状。
element_shape (可选,默认值:无) TensorShape对象,指定TensorShape的每个元素的形状约束。不需要完全定义。
colocate_with_first_write_call 如果为True ,则TensorArray将与首次写入时使用的Tensor位于同一设备上(写入操作包括writeunstacksplit )。如果为False ,则TensorArray将放置在设备上,该设备由初始化期间可用的设备上下文确定。
name 操作的名称(可选)。

ValueError 如果同时提供handle和tensor_array_name。
TypeError 如果提供了句柄但不是张量。

dtype 该TensorArray的数据类型。
dynamic_size Python bool;如果为True ,TensorArray可以动态增长。
element_shape tf.TensorShape中元素的tf.TensorShape。
flow Tensor强制操作流导致此TensorArray状态。
handle 对TensorArray的引用。

方法

close

查看资料

关闭当前的TensorArray。

concat

查看资料

返回TensorArray中的值作为串联的Tensor

除第一个值外,所有值都必须已写入所有值,它们的等级必须匹配,并且它们的形状都必须匹配。

精氨酸
name 操作的名称(可选)。

退货
TensorArray中的所有张量都连接成一个张量。

gather

查看资料

将TensorArray中的选定值作为压缩Tensor

所有选择的值都必须已写入并且其形状必须全部匹配。

精氨酸
indices 1-D Tensor[0, max_value) 。如果TensorArray不是动态的,则TensorArray max_value=size()
name 操作的名称(可选)。

退货
通过indices选择的TensorArray的张量,打包成一个张量。

grad

查看资料

identity

查看资料

返回具有相同内容和属性的TensorArray。

退货
一个新的具有流程的TensorArray对象,该对象可确保来自上下文的控件依赖关系将成为写入,读取等操作的控件依赖关系。将此对象用于所有后续操作。

read

查看资料

读取TensorArray中位置index处的值。

精氨酸
index 0维int32张量与要读取的索引。
name 操作的名称(可选)。

退货
索引index处的张量。

scatter

查看资料

Tensor的值分散在TensorArray特定索引中。

精氨酸
indices 1-D Tensor[0, max_value) 。如果TensorArray不是动态的,则TensorArray max_value=size()
value (N + 1)-D。类型为dtype张量。要打开的张量。
name 操作的名称(可选)。

退货
具有流量的新TensorArray对象,可确保发生分散。将此对象用于所有后续操作。

加薪
ValueError 如果形状推断失败。

size

查看资料

返回TensorArray的大小。

split

查看资料

Tensor的值拆分为TensorArray。

精氨酸
value (N + 1)-D。类型为dtype张量。张量分裂。
lengths 一维int32向量,沿其第一维分割value时要使用的长度。
name 操作的名称(可选)。

退货
一个新的TensorArray对象,该对象具有确保拆分发生的流程。将此对象用于所有后续操作。

加薪
ValueError 如果形状推断失败。

stack

查看资料

将TensorArray中的值作为堆叠的Tensor

所有值都必须已写入并且其形状必须全部匹配。如果输入形状具有等级R ,则输出形状将具有等级- (R+1)

精氨酸
name 操作的名称(可选)。

退货
TensorArray中的所有张量都堆叠为一个张量。

unstack

查看资料

在TensorArray中解叠Tensor的值。

如果输入值的形状具有等级R ,则输出TensorArray将包含形状为等级- (R-1)元素。

精氨酸
value (N + 1)-D。类型为dtype张量。要张量的张量。
name 操作的名称(可选)。

退货
一个新的TensorArray对象,该对象具有可确保发生堆栈的流程。将此对象用于所有后续操作。

加薪
ValueError 如果形状推断失败。

write

查看资料

value写入TensorArray的索引index

精氨酸
index 0维int32标量与要写入的索引。
value ND。类型为dtype张量。要写入此索引的张量。
name 操作的名称(可选)。

退货
一个具有确保写入发生的流程的新TensorArray对象。将此对象用于所有后续操作。

加薪
ValueError 如果作家人数超过指定人数。