2016-03-27 71 views
10

我所能夠將張量流適用於二維張量的每個元素,例如Tensorflow適用於二維張量的每個元素

input = tf.Variable([[1.0, 2.0], [3.0, 4.0]) 
myCustomOp = ... # some kind of custom op that operates on 1D tensors 
finalResult = tf.[thing I'm after](input, myCustomOp) 
# when run final result should look like: [myCustomOp([1.0, 2.0]), myCustomOp([3.0, 4.0)] 

任何想法?

+2

也許'map_fn'? Docs - https://github.com/tensorflow/tensorflow/blob/5688f5bc27e65886ca84ea4a9d58f4bb7701964b/tensorflow/g3doc/api_docs/python/control_flow_ops.md#tfmap_fnfn-elems-dtypenone-parallel_iterations10-back_proptrue-swap_memoryfalse-namenone-map_fn –

回答

19

TensorFlow(0.8,如果你從源代碼編譯或下載每晚構建這是目前)的下一個版本包括higher-order operators包括tf.map_fn()tf.scan(),讓您應用功能由TensorFlow OPS來的subtensors一個更大的張量。

tf.map_fn(fn, elems, ...)函數解包N維輸入elems沿着第一維度成多個N-1維subtensors並適用fn到每個子張量。這似乎很適合你的使用情況:

input = tf.Variable([[1.0, 2.0], [3.0, 4.0]]) 
function_to_map = lambda x: f(x) # Where `f` instantiates myCustomOp. 
final_result = tf.map_fn(function_to_map, input) 
+0

謝謝,這正是什麼我在 –

+0

之後既然'tf.map_fn'現在已經存在了,像'tf.batch_matrix_inverse'這樣的函數是多餘的,因爲它們可以被'tf.map_fn(tf.matrix_inverse,input)'替代。 – dzhelil

+1

原則上是的,但實際上'tf.batch _ *()'操作的性能可能會更好。我期待優化器能夠爲基於地圖的版本生成更好的代碼的那一天! – mrry

相關問題