Tensorflow: Schneiden eines Tensors in überlappende Blöcke

8

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])

%Vor%

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])

    
Uri Merhav 21.10.2016, 23:06
quelle

5 Antworten

5

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.

Generische Lösung

%Vor%

Sollte Ihnen die Ausgabe geben:

%Vor%

Einfachere Lösung

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%     
kempy 25.10.2016 01:15
quelle
2

Hier ist ein relativ geradliniger Ansatz anhand Ihres Beispiels:

%Vor%

Ausgabe:

%Vor%     
RobR 25.10.2016 02:54
quelle
1

Das erreichen Sie auch mit tf.extract_image_patches .

%Vor%     
vijay m 27.07.2017 10:38
quelle
0

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%     
Eli Bixby 06.01.2017 03:11
quelle
0

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%     
FritzFitzpatrick 29.12.2017 18:13
quelle

Tags und Links