2016-02-11 12 views

Odpowiedz

-6

Typ zwracanej wartości funkcji API TensorFlow Python, w tym tf.range, to Tensor. A Tensor to symboliczny uchwyt do węzła na wykresie reprezentującym obliczenia. Wykonujesz rzeczywiste obliczenia, wywołując metodę eval na Tensor lub przekazując obiekt do metody run z Session. W twoim przypadku być może to, co masz zamiar zrobić, to po prostu powtórzyć numpy 's range.

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

Nie, to nie jest to, czego szukam. Chcę, aby pętla działała k razy, podczas gdy k jest określane na podstawie danych wejściowych. Wejście jest symbolem zastępczym tensora. –

+0

W rzeczywistości mam dwa wejścia. Pierwsza to macierz, a druga to ile razy powinna być wykonana konkretna operacja. –

+2

Podczas pisania tensorflow op, posiadającego numpy wywołania, uniemożliwia działanie op na GPU, więc ważne jest, aby op miał tylko tensorflow ops zgodny z GPU. –

16

W tym celu trzeba będzie użyć tensorflow pętli while (tf.while_loop) w następujący sposób zrobić:

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

Działa dla mnie. Tnx! – anamar

+0

co, gdy mam zmienną w pętli? Dostaję referencyjny błąd https://stackoverflow.com/questions/47760429/tensorflow-local-variable-lstm-state-referenced-before-assignment – kong

+0

Wydaje się to działać, ale wydaje się bezpośrednio sprzeczne z poradą Tensorflow: "Dla poprawne programy, while_loop powinien zwracać ten sam wynik dla wszystkich parallel_iterations> 0. " Wygląda na to, że może to doprowadzić do stanu wyścigowego prowadzącego do pętli ocenianej gdziekolwiek pomiędzy "n" i "n * równoległymi" razy –

Powiązane problemy