2015-12-13 41 views
7

Lavoro con molti dati dtype="str". Ho cercato di creare un semplice grafico come in https://www.tensorflow.org/versions/master/api_docs/python/train.html#SummaryWriter.Tensore della stringa di unione in TensorFlow

Per un funzionamento semplice, ho voluto per concatenare le stringhe insieme utilizzando un placeholder come in (How to feed a placeholder?)

Qualcuno sa come unire tensori stringa insieme?

import tensorflow as tf 
sess = tf.InteractiveSession() 

with tf.name_scope("StringSequence") as scope: 
    left = tf.constant("aaa",name="LEFT") 
    middle = tf.placeholder(dtype=tf.string, name="MIDDLE") 
    right = tf.constant("ccc",name="RIGHT") 
    complete = tf.add_n([left,middle,right],name="COMPLETE") #fails here 
sess.run(complete,feed_dict={middle:"BBB"}) 
#writer = tf.train.SummaryWriter("https://stackoverflow.com/users/mu/test_out/", sess.graph_def) 

risposta

2

Non c'è un modo per farlo al momento, AFAIK.

Riconoscendo che questa è una risposta deludente, ho archiviato issue #701 on GitHub per tracciare questa richiesta.

+0

L'OP può aggiungere un nuovo [TensorFlow op] (https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html)? –

+1

Sì, sarebbe un modo per farlo. Daremo il benvenuto a un contributo: questo è chiaramente qualcosa che più persone vorranno. – dga

+1

Sono tentato ma non lo sarà per alcuni mesi, poiché devo ancora passare agli esempi di base di TensorFlow, agli esempi di GPU, e quindi accelerare il mio C++. Attualmente sto traducendo [Neural Networks and Deep Learning] (http://neuralnetworksanddeeplearning.com/) in F # per sfruttare la mia conoscenza di F # nell'apprendimento di Deep Learning e Python. Ma lo terrò in cima alla lista ora che hai confermato che sto iniziando a comprendere TensorFlow. Grazie. –

3

So che questa non è una risposta immediata e non voglio che questo rimanga nascosto nei commenti.

Se si desidera incorporare un'operazione che non è coperta dalla libreria esistente, è possibile creare uno custom Op. Per incorporare il tuo Op personalizzato, dovrai:

  • Registrare il nuovo Op in un file C++. La registrazione Op è indipendente dall'implementazione e descrive la semantica di come viene richiamato Op. Ad esempio, definisce il nome Op e specifica i suoi input e output.
  • Implementare l'op in C++. Questa implementazione è chiamata "kernel" e possono esistere più kernel per diverse architetture (ad esempio CPU, GPU) o tipi di input/output.
  • Creare un wrapper Python. Questo wrapper è l'API pubblica per creare Op. Un wrapper predefinito viene generato dalla registrazione Op, che può essere utilizzata direttamente o aggiunta a.
  • Opzionalmente, scrivere una funzione per calcolare i gradienti per Op.
  • Opzionalmente, scrivere una funzione che descriva le forme di input e output per Op. Ciò consente di dedurre la forma per lavorare con il tuo Op.
  • Prova l'operazione, in genere in Python. Se si definiscono i gradienti, è possibile verificarli con Python GradientChecker.

Quello che hai chiesto se molto rilevante e probabilmente diventerà uno dei risultati di ricerca Google più elevati in futuro per l'utilizzo del tipo di stringa con TensorFlow; in quanto tale, questa via per una soluzione deve essere resa disponibile in modo che gli altri siano consapevoli dell'esistenza.

15

Grazie alla tua domanda, abbiamo dato la priorità all'aggiunta del supporto per la concatenazione di stringhe in TensorFlow e l'abbiamo aggiunto in this commit. La concatenazione di stringhe viene implementata utilizzando l'operatore esistente, in modo che corrisponda al comportamento di NumPy's add operator (inclusa la trasmissione).

Per implementare il tuo esempio, si può scrivere:

complete = left + middle + right 

... o, equivalentemente, ma se si vuole dare un nome al tensore risultante:

complete = tf.add(tf.add(left, middle), right, name="COMPLETE") 

non abbiamo ancora aggiunto il supporto per le stringhe in tf.add_n() (o operazioni correlate come tf.reduce_sum()) ma lo prenderà in considerazione se ci sono casi d'uso per questo.

NOTA: Per utilizzare immediatamente questa funzionalità, è necessario build TensorFlow from source. La nuova operazione sarà disponibile nella prossima versione di TensorFlow (0.7.0).

Problemi correlati