2015-11-24 79 views
8

我使用tf.placeholders()操作來提供變量批量輸入的二維張量,並使用供給機制爲這些張量提供不同的值,當我調用run( )。 我使用Tensorflow生成可變批量大小的圖形

TypeError: 'Tensor' object is not iterable.

以下是我的代碼:

with graph.as_default(): 
    train_index_input = tf.placeholder(tf.int32, shape=(None, window_size)) 
    train_embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_dimension], -1.0, 1.0)) 
    embedding_input = [tf.nn.embedding_lookup(train_embeddings, x) for x in train_index_input] 
    ...... 
    ...... 

正如我不能看到張量「train_index_input」的內容,而無需運行圖,這樣的「錯誤‘張量’對象不迭代」提出的代碼:

embedding_input = [tf.nn.embedding_lookup(train_embeddings, x) for x in train_index_input] 

我想獲得是嵌入基質‘embedding_input’,即形狀[batch_size時,embedding_dimension]其中的不固定。我需要在Tensorflow中定義一個新的操作來嵌入2D張量的查找嗎?或者任何其他方式來做到這一點?謝謝

回答

7

你想通過Tensorflow佔位符做一個python級別的列表理解(for x in train_index_input)。這是行不通的 - Python不知道tf對象裏面有什麼。

要完成一批嵌入查詢,你可以做什麼只是彙整批:

train_indexes_flat = tf.reshape(train_index_input, [-1]) 

來看,它通過嵌入查找:

looked_up_embeddings = tf.nn.embedding_lookup(train_embeddings, train_indexes_flat) 

,然後重新塑造它放回正確的組:

embedding_input = tf.reshape(looked_up_embeddings, [-1, window_size]) 
+0

我有一個類似的問題,輸入的形狀是'[batch_size,maxstep,50,50]',我想使用某個cnn使其成爲'[batch_size,maxstep,5 * 5 * 32]',但很難在沒有循環的情況下構建圖形。有什麼想法嗎?非常感謝你。 – Sraw