2016-05-07 25 views

risposta

0

Il codice sorgente indica che questa funzione richiede un solo elems tensore:

def map_fn(fn, elems, dtype=None, parallel_iterations=10, back_prop=True, 
     swap_memory=False, name=None): 

io non ritengono * e parametri **.

+0

anche io la penso così. Volevo solo avere una conferma. –

+0

@ADas Poiché si tratta di un tensore, è possibile avere qualsiasi forma di vettori. Quindi un tensore potrebbe essere sufficiente. –

7
Non

nativamente, ma qui è una funzione rapida che consente di ottenere esso:

def map(fn, arrays, dtype=tf.float32): 
    # assumes all arrays have same leading dim 
    indices = tf.range(tf.shape(arrays[0])[0]) 
    out = tf.map_fn(lambda ii: fn(*[array[ii] for array in arrays]), indices, dtype=dtype) 
    return out 

# example: batch affine tranformation 
x = tf.random_normal([4,5,6]) 
M = tf.random_normal([4,6,10]) 
b = tf.random_normal([4,10]) 

f = lambda x0,M0,b0: tf.matmul(x0,M0) + b0 
batch_y = map(f, [x,M,b]) 
+1

Questo [era già sbagliato al momento della pubblicazione] (https://github.com/tensorflow/tensorflow/blob/2939f53ea2d5dc9de018d9ad64a3ac03d03d4925/tensorflow/python/ops/functional_ops.py#L213). È inutilmente complicato, si prega di downvotare e revocare la risposta in basso. – LucasB

6

Come oggi, vedo che map_fn è stato migliorato per prendere due tensori come la documentazione afferma che - "elems: un tensore o (sequenza annidata) di tensori, ognuno dei quali verrà decompresso lungo la loro prima dimensione. La sequenza nidificata delle sezioni risultanti sarà applicata a fn. " L'esempio (sebbene fornito in forma numpy) mostra anche che può richiedere due tensori. Lo sto copiando qui.

elems = (np.array([1, 2, 3]), np.array([-1, 1, -1])) 
alternate = map_fn(lambda x: x[0] * x[1], elems, dtype=tf.int64) 
# alternate == [-1, 2, -3] 

Source:

Problemi correlati