在tensorflow中折叠两个列表

时间:2016-12-15 00:44:06

标签: python tensorflow fold

如何使用tensorflow折叠两个张量? tensorflow.foldl作为输入

  • 类型为a, b -> a的函数(此处ab表示特定形状的张量类型)
  • 可以解压缩到类型[b]
  • 类型的b列表中的张量
  • 类型a
  • 的初始累加器

我需要一个作为输入的函数

  • 类型为a, b, c -> a
  • 的函数
  • 可以解压缩到类型[b]
  • 类型的b列表中的张量
  • 可以解压缩到类型[c]
  • 类型的c列表中的张量
  • 类型为a的初始累加器。

2 个答案:

答案 0 :(得分:0)

使用 concat 转置并折叠0维度,但它仅适用于相同类型。例如:

data_x = [[i for i in range(1,11)]]
data_y = [[10*i for i in range(1,11)]]

x = tf.placeholder(tf.float32, shape=(1,10))
y = tf.placeholder(tf.float32, shape=(1,10))
c = tf.constant(100.)

cn = tf.concat([x,y], axis=0)
t = tf.transpose(cn)
f = tf.foldl(lambda a,y: a+y[0]+y[1], t, c)

with tf.Session() as sess:
  res = sess.run(t, feed_dict={x: data_x, y: data_y})
  print(res)

答案 1 :(得分:0)

使用while循环:

import tensorflow as tf

def fold2(f, li1, li2, init):
    (_, a1) = tf.while_loop(lambda i, a: i<tf.shape(li1)[0], lambda i, a: (i+1, f(a, li1[i], li2[i])), (0,init))
    return a1

顺便提一下,这也适用于TensorArray,而tf.foldl却没有。