String-Tensoren in TensorFlow zusammenführen

7

Ich arbeite mit vielen dtype="str" Daten. Ich habe versucht, ein einfaches Diagramm wie in Ссылка zu erstellen.

Für eine einfache Operation wollte ich Strings mit einem placeholder wie in () verketten Wie füttere ich einen Platzhalter? )

Kann jemand String-Tensoren zusammenführen?

%Vor%     
O.rka 13.12.2015, 02:26
quelle

4 Antworten

15

Dank Ihrer Frage haben wir die Unterstützung für die String-Verkettung in TensorFlow priorisiert und sie in diesem Commit hinzugefügt . Die String-Verkettung wird mithilfe des vorhandenen tf.add() -Operators implementiert, um das Verhalten anzupassen von NumPys add -Operator (inklusive Broadcasting).

Um Ihr Beispiel zu implementieren, können Sie schreiben:

%Vor%

... oder äquivalent, aber wenn Sie den resultierenden Tensor benennen wollen:

%Vor%

Wir haben noch keine Unterstützung für Strings in tf.add_n() (oder verwandte Ops wie tf.reduce_sum() ) hinzugefügt, werden dies jedoch berücksichtigen, wenn es Anwendungsfälle dafür gibt.

HINWEIS: Um diese Funktionalität sofort zu verwenden, müssen Sie Erstellen Sie TensorFlow aus der Quelle . Das neue Op wird in der nächsten Version von TensorFlow (0.7.0) verfügbar sein.

    
mrry 09.01.2016 16:58
quelle
3

Ich weiß, dass dies keine unmittelbare Antwort ist und möchte nicht, dass dies in den Kommentaren verborgen bleibt.

Wenn Sie eine Operation integrieren möchten, die nicht von der vorhandenen Bibliothek abgedeckt wird, können Sie ein benutzerdefinierte Op . Um Ihren benutzerdefinierten Op zu integrieren, müssen Sie:

  • Registrieren Sie den neuen Op in einer C ++ Datei. Die Op-Registrierung ist unabhängig von der Implementierung und beschreibt die Semantik, wie die Op aufgerufen wird. Zum Beispiel definiert es den Op-Namen und spezifiziert seine Eingaben und Ausgaben.
  • Implementieren Sie den Op in C ++. Diese Implementierung wird als "Kernel" bezeichnet, und es können mehrere Kernel für verschiedene Architekturen (z. B. CPUs, GPUs) oder Eingabe- / Ausgabetypen vorhanden sein.
  • Erstellen Sie einen Python-Wrapper. Dieser Wrapper ist die öffentliche API, um den Op zu erstellen. Aus der Op-Registrierung wird ein Standard-Wrapper generiert, der direkt verwendet oder hinzugefügt werden kann.
  • Schreiben Sie optional eine Funktion, um Gradienten für den Op zu berechnen.
  • Schreiben Sie optional eine Funktion, die die Eingabe- und Ausgabeformen für Op beschreibt. Dies ermöglicht Formschluss, um mit Ihrem Op zu arbeiten.
  • Testen Sie den Op, normalerweise in Python. Wenn Sie Verläufe definieren, können Sie diese mit dem Python GradientChecker überprüfen.

Was Sie gefragt haben, wenn es sehr relevant ist und in Zukunft wahrscheinlich zu einem der höheren Google-Suchergebnisse werden wird, wenn Sie String-Typ mit TensorFlow verwenden; Daher muss dieser Weg zu einer Lösung verfügbar gemacht werden, so dass andere wissen, dass sie existiert.

    
Guy Coder 07.01.2016 13:26
quelle
2

Ich glaube, dass die sparse_concat op ist, was Sie suchen: Ссылка

add_n fügt numerische Werte zusammen.

    
Ian Goodfellow 14.12.2015 16:52
quelle
2

Es gibt derzeit keinen Weg dies zu tun, AFAIK.

In Anerkennung dessen, dass dies eine enttäuschende Antwort ist, habe ich Ausgabe # 701 auf GitHub eingereicht, um diese Anfrage zu verfolgen .

    
dga 05.01.2016 21:43
quelle