2017-03-07 51 views
2

可以說,我們想要使用Keras/TensorFlow處理圖像(或ndim向量)。 而我們想要花哨的正規化,將每個輸入移動到左邊的隨機位置(在右邊再次出現掉頭部分)。Tensorflow中的向量轉換(Roll)

怎麼可能進行查看和解決:

1)

有沒有爲TensorFlow numpy的滾動功能的變化?

2)

x - 2D tensor 
ri - random integer 
concatenate(x[:,ri:],x[:,0:ri], axis=1) #executed for each single input to the layer, ri being random again and again (I can live with random only for each batch) 

回答

5

我不得不做這我自己,我不認爲這是一個tensorflow運到np.roll不幸的是做。上面的代碼看起來基本上是正確的,不過除了不是ri滾動,而是通過(x.shape [1] - ri)。

此外,您還需要小心選擇範圍(1,x.shape [1] +1)而不是範圍(0,x.shape [1])的隨機整數,就好像ri是0,那麼x [:,0:ri]將是空的。

所以我的建議是更多的東西一樣(沿維度1卷):

x_len = x.get_shape().as_list()[1] 
i = np.random.randint(0,x_len) # The amount you want to roll by 
y = tf.concat([x[:,x_len-i:], x[:,:x_len-i]], axis=1) 

編輯:後漢內斯正確的註釋添加缺少的結腸。

+0

感謝您糾正我的錯誤! – Khaj

+2

最後一行沒有':',應該是'y = tf.concat([x [:,x_len-i:],x [:,:x_len-i]],axis = 1)' – hannes

1

關於張量流(或未來版本1.6.0)的當前夜間構建。你可以使用tf.manip.roll,就像numpy roll一樣工作。 https://github.com/tensorflow/tensorflow/pull/14953。 要改善上述答案,您可以:

# size of x dimension 
x_len = tensor.get_shape().as_list()[1] 
# random roll amount 
i = tf.random_uniform(shape=[1], maxval=x_len, dtype=tf.int32) 
output = tf.manip.roll(tensor, shift=i, axis=[1]) 
+0

While這個鏈接可能回答這個問題,最好在這裏包含答案的重要部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18734544) –