要遍历张量,您可以尝试tf.unstack
将等级R张量的给定尺寸解压缩为等级(R-1)张量。
因此,将每个张量加1看起来像:
import tensorflow as tf
x = tf.placeholder(tf.float32, shape=(None, 10))
x_unpacked = tf.unstack(x) # defaults to axis 0, returns a list of tensors
processed = [] # this will be the list of processed tensors
for t in x_unpacked:
# do whatever
result_tensor = t + 1
processed.append(result_tensor)
output = tf.concat(processed, 0)
with tf.Session() as sess:
print(sess.run([output], feed_dict={x: np.zeros((5, 10))}))
显然,您可以进一步从列表中解压缩每个张量以处理它,直到单个元素。但是,为了避免大量嵌套拆包,您可以尝试先用tf.reshape(x, [-1])
平x,然后像这样循环遍历
flattened_unpacked = tf.unstack(tf.reshape(x, [-1])
for elem in flattened_unpacked:
process(elem)
在这种情况下, elem
是标量。
0
我正在尝试以python方式处理可变大小的张量,如下所示:
我尝试使用tf.scan ,但事实是我想处理每个子张量,所以我尝试使用嵌套的scan ,但是启用了它,因为tf.scan与累加器一起工作,如果找不到,它将把elems的第一项作为初始化器,我不想这样做。举个例子,假设我想给张量的每个元素添加一个(这只是一个例子),并且我想逐个元素地对其进行处理。如果我运行下面的代码,我只会在子张量中添加一个,因为扫描会将第一个张量与每个子张量的第一个元素一起视为初始化器。
有什么建议么 ?