Ich habe einen 1D-Tensor, den ich in überlappende Blöcke aufteilen möchte. Ich denke an etwas wie:
tensor = tf.constant([1, 2, 3, 4, 5, 6, 7])
Bisher habe ich nur Wege gefunden, einen Tensor in nicht überlappende Blöcke zu partitionieren. Kennt jemand einen Weg, um das zu lösen?
Dies muss für eine beliebige Eingabedimension funktionieren (d. h. meine Eingabe ist wie ein tf.placeholder([None])
Sie können tf.nn.conv2d verwenden, um zu helfen. Grundsätzlich nehmen Sie einen Gleitfilter von block_size über die Eingabe, Schritt für Schritt. Um alle Matrixindizes in eine Linie zu bringen, müssen Sie etwas umformen.
Sollte Ihnen die Ausgabe geben:
%Vor%Dies ist die erste Version, die funktioniert, die keine Variable block_size zulässt, aber ich denke, es ist einfacher zu sehen, was mit den Convolution-Filtern passiert - wir nehmen einen Vektor von 3 Werten, alle Schritte.
%Vor% Wenn Sie nach einem Weg suchen, jedes rollende Fenster als einzelnen Tensor zu erhalten (dh jedes Mal, wenn Sie window.eval()
aufrufen, bewegt sich Ihr Fenster um eins. Sie können tf.FIFOQueue
sowie tf.train.range_input_producer
verwenden, um a zu erstellen Warteschlange, die dies tut:
BEARBEITEN: aktualisiert, um mit Tensoren variabler Länge zu arbeiten, wie in Ihrer ursprünglichen Antwort gefordert
%Vor%Ich bin nicht sicher, ob diese Frage ausreichend beantwortet wurde, aber Sie können eine Python-Generatorfunktion verwenden, um überlappende Fenster zu erstellen:
%Vor%Sobald Sie Ihre Generatorfunktion definiert haben, können Sie die TensorFlow-Klasse Dataset verwenden, um jedes Segment aufzurufen:
%Vor%Tags und Links tensorflow