Ich habe festgestellt, dass Indizierung immer noch ein offenes Problem in Tensorflow (#206) ist, also frage ich mich, was ich als Workaround im Moment verwenden könnte. Ich möchte eine Zeile/Spalte einer Matrix basierend auf einer Variable, die sich für jedes Trainingsbeispiel ändert, indexieren/schneiden.Tensorflow Slicing basierend auf Variable
Was ich bisher versucht:
- Slicing auf Platzhalter Basis (nicht funktioniert)
Folgende (in Betrieb) Codescheiben basierend auf einer festgelegten Anzahl.
Es scheint jedoch, dass ich nicht einfach eine dieser festen Nummern durch einen tf.Placeholder ersetzen kann. Der folgende Code gibt mir den Fehler "TypeError: Liste der Tensoren, wenn Single Tensor erwartet."
import tensorflow as tf
import numpy as np
x = tf.placeholder("float")
i = tf.placeholder("int32")
y = tf.slice(x,[i],[1])
#initialize
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
#run
result = sess.run(y, feed_dict={x:[1,2,3,4,5],i:0})
print(result)
Das klingt wie die Klammern um [i] sind zu viel, aber sie zu entfernen entweder nicht hilft. Wie verwende ich einen Platzhalter/eine Variable als Index?
- Slicing auf Python Variable basiert (nicht Backprop/update richtig)
ich auch einen normalen Python-Variable als Index versucht habe. Dies führt nicht zu einem Fehler, aber das Netzwerk lernt während des Trainings nichts. Ich nehme an, weil die sich ändernde Variable nicht korrekt registriert ist, ist das Diagramm fehlerhaft und Updates funktionieren nicht?
- Slicing über One-Hot-Vektor + Multiplikation (Arbeiten, aber langsam)
Eine Abhilfe gefunden wird mit einem One-Hot-Vektor. Einen einharten Vektor in Annotieren erstellen, diesen mit einem Platzhalter übergeben und dann das Slicing über Matrixmultiplikation durchführen. Das funktioniert, ist aber ziemlich langsam.
Haben Sie Ideen, wie Sie auf der Grundlage einer Variablen effizient schneiden/indexieren können?
Das funktioniert, vielen Dank! – Daniela
Es gab den folgenden Fehler: ValueError: Shape() muss Rang 1 haben – tejaskhot
Ah ja, TensorFlow wurde strikter über den Unterschied zwischen Skalaren und Länge-1-Vektoren, seit ich das gepostet habe. Die Antwort wurde aktualisiert, um es zu beheben. – mrry