2015-12-13 16 views
7

Pracuję z wieloma danymi dtype="str". Próbowałem zbudować prosty wykres, jak w https://www.tensorflow.org/versions/master/api_docs/python/train.html#SummaryWriter.Scalanie ciągów tensorów w TensorFlow

Dla prostej operacji, chciałem łączenia ciągów razem z użyciem placeholder jak w (How to feed a placeholder?)

Czy ktoś wie jak połączyć tensory ciągów razem?

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) 

Odpowiedz

2

Nie ma sposobu, aby to zrobić w chwili obecnej, AFAIK.

Uznając, że jest to niezadowalająca odpowiedź, zgłosiłem issue #701 on GitHub, aby śledzić tę prośbę.

+0

Czy OP może dodać nowe [TensorFlow op] (https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html)? –

+1

Tak, to byłby sposób na zrobienie tego. Będziemy wdzięczni za wkład - to oczywiście coś, czego wielu ludzi będzie chciało. – dga

+1

Jestem kuszony, ale nie będzie to przez kilka miesięcy, ponieważ wciąż muszę przejrzeć podstawowe przykłady TensorFlow, przykłady GPU, a następnie przyspieszyć działanie C++. Obecnie tłumaczę [Neural Networks and Deep Learning] (http://neuralnetworksanddeeplearning.com/) na F #, aby wykorzystać moją wiedzę z F # do nauki Deep Learning i Python. Ale utrzymam go wysoko na liście, kiedy potwierdziłeś, że zaczynam chwytać TensorFlow. Dzięki. –

3

Wiem, że to nie jest natychmiastowa odpowiedź i nie chcę, aby to pozostało ukryte w komentarzach.

Jeśli chcesz uwzględnić operację, która nie jest objęta istniejącą biblioteką, możesz utworzyć custom Op. Aby uwzględnić niestandardową operację, musisz:

  • Zarejestruj nową operację w pliku C++. Rejestracja OP jest niezależna od implementacji i opisuje semantykę sposobu wywoływania Op. Na przykład określa nazwę Op i określa jej wejścia i wyjścia.
  • Implementacja operacji w C++. Ta implementacja jest nazywana "jądrem" i może istnieć wiele jąder dla różnych architektur (na przykład procesorów, GPU) lub typów wejścia/wyjścia.
  • Utwórz opakowanie Pythona. To opakowanie jest publicznym interfejsem API służącym do tworzenia op. Domyślny wrapper jest generowany z rejestracji OP, który może być użyty bezpośrednio lub dodany do.
  • Opcjonalnie, można napisać funkcję do obliczania gradientów dla Op.
  • Opcjonalnie, zapisz funkcję opisującą kształty wejściowe i wyjściowe dla Op. Dzięki temu podpowiedzi kształtu współpracują z op.
  • Testuj Op, zwykle w Pythonie. Jeśli definiujesz gradienty, możesz je zweryfikować za pomocą Python GradientChecker.

To, o co prosiłeś, jest bardzo trafne i prawdopodobnie stanie się jednym z wyższych wyników wyszukiwania Google w przyszłości, jeśli chodzi o stosowanie typu łańcucha z TensorFlow; jako taka, ta droga do rozwiązania musi zostać udostępniona, aby inni wiedzieli, że istnieje.

15

Dzięki twojemu pytaniu nadaliśmy priorytet dodaniu obsługi konkatenacji ciągów w TensorFlow i dodaliśmy ją w this commit. Łączenie ciągów jest realizowane za pomocą istniejącego operatora tf.add(), aby dopasować zachowanie NumPy's add operator (w tym rozgłaszanie).

Aby zrealizować swój przykład, można napisać:

complete = left + middle + right 

... lub równoważnie, ale jeśli chcesz, aby wymienić wynikowy tensor:

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

Jeszcze nie dodano wsparcie dla ciągów w tf.add_n() (lub podobnych opcjach, takich jak tf.reduce_sum()), ale rozważy to, jeśli istnieją przypadki użycia dla niego.

UWAGA: Aby natychmiast skorzystać z tej funkcji, musisz build TensorFlow from source. Nowa operacja będzie dostępna w następnej wersji TensorFlow (0.7.0).

Powiązane problemy