2017-03-05 2 views
1

Ich folge RNN tutorial of Tensorflow. Ich habe Probleme die function ptb_producer in reader.py in folgenden Skript zu verstehen:Tensorflow RNN tutorial

with tf.control_dependencies([assertion]): 
     epoch_size = tf.identity(epoch_size, name="epoch_size") 

    i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue() 
    x = tf.strided_slice(data, [0, i * num_steps],[batch_size, (i + 1) * num_steps]) 
    x.set_shape([batch_size, num_steps]) 
    y = tf.strided_slice(data, [0, i * num_steps + 1],[batch_size, (i + 1) * num_steps + 1]) 
    y.set_shape([batch_size, num_steps]) 
    return x, y 

Kann mir jemand erklären, was tf.train.range_input_producer tut?

Antwort

0

Ich habe versucht, das gleiche Tutorial seit Wochen zu verstehen. Was es meiner Meinung nach so schwer macht, ist die Tatsache, dass alle Funktionen, die man von TensorFlow aufruft, nicht sofort ausgeführt werden, sondern vielmehr ihre entsprechenden Operationsknoten zum Graphen hinzufügen.

Gemäß der official documentation generiert ein Range Input Producer 'Ganzzahlen von 0 bis limit - 1 in einer Warteschlange'. So, wie ich es sehe, erstellt der Code in Frage i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue() einen Knoten, der als ein Zähler fungiert, die nächste Nummer in der Sequenz 0:(epoch_size) einmal ausgeführt.

Dies wird verwendet, um den nächsten Stapel aus den Eingabedaten zu erhalten. Die Rohdaten werden in batch_size Zeilen aufgeteilt, so dass in jedem Lauf batch_size Chargen an die Trainingsfunktion übergeben werden. In jedem Stapel (Zeile) bewegt sich ein Schiebefenster der Größe num_steps vorwärts. Mit dem Zähler i kann das Fenster bei jedem Anruf um num_steps weitergeschaltet werden.

Sowohl x und y sind Form [batch_size, num_steps], da sie jeweils batch_size Chargen von num_steps Schritte enthalten. Variable x ist der Eingang und y ist die erwartete Ausgabe für den gegebenen Eingang (es durch Bewegen des Fensters ein Element nach links erzeugt wird, so dass iff x = data[i:(i + num_steps] then y = data[(i + 1):(i + num_steps + 1)].

Es ist ein Alptraum für mich gewesen, aber ich hoffe, dieser Beitrag hilft Menschen in der Zukunft

Verwandte Themen