2016-02-11 41 views

risposta

-6

Il tipo del valore restituito delle funzioni API Python TensorFlow, incluso tf.range è un Tensor. A Tensor è un handle simbolico per il nodo in un grafico che rappresenta il calcolo. Si esegue il calcolo effettivo chiamando il metodo eval su un Tensor o passando l'oggetto al metodo run di un Session. Nel tuo caso, forse quello che avevi intenzione di fare era semplicemente scorrere lo range dello numpy.

for in in np.range(...): 
    # do something 
+0

No, questo non è quello che sto cercando. Voglio che un ciclo funzioni k volte mentre k è determinato in base all'input. L'input è un segnaposto tensoriale. –

+0

In effetti, ho due ingressi. Il primo è una matrice, e il secondo è il numero di volte in cui un'operazione specifica deve essere eseguita su quello. –

+2

Quando si scrive un operazione tensorflow, con chiamate numpy, si impedisce all'OP di funzionare sulla GPU, quindi è importante che l'op abbia solo operazionali tensorflow compatibili con GPU. –

16

Per fare questo è necessario utilizzare il tensorflow ciclo while (tf.while_loop) come segue:

i = tf.constant(0) 
while_condition = lambda i: tf.less(i, input_placeholder[1, 1]) 
def body(i): 
    # do something here which you want to do in your loop 
    # increment i 
    return [tf.add(i, 1)] 

# do the loop: 
r = tf.while_loop(while_condition, body, [i]) 
+1

Funziona per me. Tnx! – anamar

+0

cosa succede quando ho una variabile nel ciclo? Ricevo un errore di riferimento https://stackoverflow.com/questions/47760429/tensorflow-local-variable-lstm-state-referenced-before-assignment – kong

+0

Questo sembra funzionare, ma sembra contraddire direttamente il consiglio di Tensorflow: "Per programmi corretti, while_loop dovrebbe restituire lo stesso risultato per qualsiasi parallel_iterations> 0. " Sembra che questo possa creare una condizione di competizione che porta al ciclo di essere valutato ovunque tra "n" e "n * parallel_iterations" volte –

Problemi correlati