我的TensorFlow图的一个输入是可变长度数组的列表(例如[[0, 1, 2], [3, 4], [5, 6, 7, 8]
)。为了表示这一点,我在图表中使用了TensorArray。
但是,在运行图表时,由于feed_dict={ some_ta: [[0, 1, 2], [3, 4], [5, 6, 7, 8]] }
无效,我无法找到一种方式来输入一批TensorArrays。
目前是否存在允许我直接将TensorArrays输入会话的解决方法?
答案 0 :(得分:0)
此案例没有开箱即用的解决方案,但您可以尝试解决方法。
最简单的解决方法是填充所有输入数据(例如使用零),以便所有数组具有相同的维度。请注意,tensorflow旨在使用张量执行计算,张量具有矩形,而不是可变的形状。因此,这种方式可能会更快地完成您的操作,但您需要调整算法以忽略尾随零。
在上面的示例中,代码很简单:
# can hold any number of 4-D vectors
input = tf.placeholder(dtype=tf.float32, shape=[None, 4])
with tf.Session() as session:
data = [[0, 1, 2, 0], [3, 4, 0, 0], [5, 6, 7, 8]]
print session.run(input, feed_dict={input: data})
如果长度恰好是固定的,您可以通过这种方式对输入进行分区
input = tf.placeholder(dtype=tf.float32, shape=[None])
split = tf.dynamic_partition(input, partitions=[0, 0, 0, 1, 1, 2, 2, 2, 2], num_partitions=3)
with tf.Session() as session:
data = [0, 1, 2, 3, 4, 5, 6, 7, 8]
print session.run(split, feed_dict={input: data})
结果如下:
[array([ 0., 1., 2.], dtype=float32), array([ 3., 4.], dtype=float32), array([ 5., 6., 7., 8.], dtype=float32)]
partitions
参数不能是张量,因此在构建图形时必须静态地知道它。
要执行真正的任意分割,您需要自己手动执行此操作。您仍然将data
作为单个数组传递,同时保存分区索引的partitions
。然后,您可以按this question或this question中的建议执行繁琐的拆分。除非绝对别无其他办法,否则我不建议你遵循这条道路。