如何将TensorArray提供给TensorFlow会话

时间:2017-07-06 11:08:17

标签: python numpy machine-learning tensorflow

我的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输入会话的解决方法?

1 个答案:

答案 0 :(得分:0)

此案例没有开箱即用的解决方案,但您可以尝试解决方法。

  1. 最简单的解决方法是填充所有输入数据(例如使用零),以便所有数组具有相同的维度。请注意,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})
    
  2. 如果长度恰好是固定的,您可以通过这种方式对输入进行分区

    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参数不能是张量,因此在构建图形时必须静态地知道它。

  3. 要执行真正的任意分割,您需要自己手动执行此操作。您仍然将data作为单个数组传递,同时保存分区索引的partitions。然后,您可以按this questionthis question中的建议执行繁琐的拆分。除非绝对别无其他办法,否则我不建议你遵循这条道路。