2017-07-06 63 views
1

TensorFlow圖形的輸入之一是可變長度數組的列表(例如[[0, 1, 2], [3, 4], [5, 6, 7, 8])。爲了表示這一點,我在圖中使用了TensorArray。如何將TensorArray提供給TensorFlow會話

但是,當涉及到運行圖形時,我無法找到一種方式來饋入一批TensorArrays,因爲feed_dict={ some_ta: [[0, 1, 2], [3, 4], [5, 6, 7, 8]] }不起作用。

目前是否有任何解決方法允許我將TensorArrays直接輸入會話?

回答

0

這種情況沒有現成的解決方案,但您可以嘗試一種解決方法。

  1. 最簡單的解決方法是將所有墊輸入數據(例如用零),使得所有陣列具有相同的尺寸。請注意,張量流設計用於執行張量的計算,其張量爲,其具有矩形而非變量的形狀。因此,這樣你的操作可能會快得多,但你需要調整算法以忽略尾隨零。

    在上面的例子中,代碼很簡單:

    # 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參數不能是張量,s o在構建圖形時必須靜態地知道它。

  3. 要執行真正的任意拆分,您將自己手動執行此操作。您仍然將data作爲單個陣列,以及保存分區索引的partitions。然後,您可以按照this questionthis question中的建議進行繁瑣的拆分。除非絕對沒有別的辦法,否則我不會推薦你遵循這條道路。

相關問題