2016-12-06 4 views
1

Zum Beispiel:Wie macht man eine multidimensionale Schicht im Tensorflow?

array = [[1, 2, 3], [4, 5, 6]] 

slice = [[0, 0, 1], [0, 1, 2]] 

output = [[1, 1, 2], [4, 5,6]] 

Ich habe array[slice] versucht, aber das hat nicht funktioniert. Ich konnte auch tf.gather oder tf.gather_nd nicht funktionieren, obwohl diese zunächst wie die richtigen Funktionen zu verwenden schienen. Beachten Sie, dass dies alle Tensoren im Graphen sind.

Wie kann ich diese Werte in meinem Array nach Slice auswählen?

Antwort

1

Sie müssen eine Dimension zu Ihrem slice Tensor, die Sie mit tf.pack tun können, und dann können wir tf.gather_nd kein Problem hinzufügen.

import tensorflow as tf 

tensor = tf.constant([[1, 2, 3], [4, 5, 6]]) 
old_slice = tf.constant([[0, 0, 1], [0, 1, 2]]) 

# We need to add a dimension - we need a tensor of rank 2, 3, 2 instead of 2, 3 
dims = tf.constant([[0, 0, 0], [1, 1, 1]]) 
new_slice = tf.pack([dims, old_slice], 2) 
out = tf.gather_nd(tensor, new_slice) 

Wenn wir führen Sie den Folgecode:

with tf.Session() as sess: 
    sess.run(tf.initialize_all_variables()) 
    run_tensor, run_slice, run_out = sess.run([tensor, new_slice, out]) 
    print 'Input tensor:' 
    print run_tensor 
    print 'Correct param for gather_nd:' 
    print run_slice 
    print 'Output:' 
    print run_out 

Dies sollte die korrekte Ausgabe geben:

Input tensor: 
[[1 2 3] 
[4 5 6]] 
Correct param for gather_nd: 
[[[0 0] 
    [0 0] 
    [0 1]] 

[[1 0] 
    [1 1] 
    [1 2]]] 
Output: 
[[1 1 2] 
[4 5 6]] 
Verwandte Themen