2015-12-13 2 views
7

Я работаю с большим количеством данных dtype="str". Я пытался построить простой график, как в https://www.tensorflow.org/versions/master/api_docs/python/train.html#SummaryWriter.Объединить тензоры теней в TensorFlow

Для простой операции, я хотел конкатенации строк вместе с помощью placeholder как в (How to feed a placeholder?)

Кто-нибудь знает, как объединить строки тензоры вместе?

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) 

ответ

2

В настоящее время нет возможности сделать это AFAIK.

Признавая, что это неутешительный ответ, я подал issue #701 on GitHub для отслеживания этого запроса.

+0

Может ли OP добавить новый [TensorFlow op] (https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html)? –

+1

Да, это был бы способ сделать это. Мы приветствовали бы вклад - это явно то, чего захотят несколько людей. – dga

+1

Я искушаюсь, но это не будет в течение нескольких месяцев, так как мне еще нужно пройти через основные примеры TensorFlow, примеры GPU, а затем получить мой C++ до скорости. В настоящее время я переводит [Neural Networks and Deep Learning] (http://neuralnetworksanddeeplearning.com/) в F #, чтобы использовать свои знания F # в обучении Deep Learning и Python. Но я сохраню его в списке сейчас, когда вы подтвердили, что я начинаю понимать TensorFlow. Благодарю. –

3

Я знаю, что это не немедленный ответ и не хочу, чтобы это оставалось скрытым в комментариях.

Если вы хотите включить операцию, которая не покрывается существующей библиотекой, вы можете создать custom Op. Чтобы включить свою обычную Op, вам необходимо:

  • Зарегистрируйте новый Op в файле на C++. Регистрация Op не зависит от реализации и описывает семантику вызова Op. Например, он определяет имя Op и определяет его входы и выходы.
  • Внесите Op в C++. Эта реализация называется «ядром», и может быть несколько ядер для разных архитектур (например, процессоров, графических процессоров) или типов ввода-вывода.
  • Создайте оболочку Python. Эта оболочка является общедоступным API для создания Op. Обертка по умолчанию создается из регистрации Op, которую можно использовать напрямую или добавить.
  • При необходимости напишите функцию для вычисления градиентов для Op.
  • При необходимости напишите функцию, которая описывает формы ввода и вывода для Op. Это позволяет сделать вывод о форме для работы с вашей Op.
  • Проверьте Op, как правило, на Python. Если вы определяете градиенты, вы можете проверить их с помощью Python GradientChecker.

Что вы задали, если это очень важно и, вероятно, станет одним из самых высоких результатов поиска Google в будущем для использования строкового типа с TensorFlow; поэтому такой способ решения должен быть доступен, чтобы другие знали, что он существует.

15

По вашему вопросу мы указали приоритет добавления поддержки конкатенации строк в TensorFlow и добавили ее в this commit. Конкатенация строк выполняется с использованием существующего оператора tf.add(), чтобы соответствовать поведению NumPy's add operator (включая широковещательную передачу).

Чтобы реализовать пример, вы можете написать:

complete = left + middle + right 

... или, что то же самое, но если вы хотите назвать полученный тензор:

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

Мы еще не добавили поддержку строк в tf.add_n() (или связанные с ним операции, такие как tf.reduce_sum()), но рассмотрим это, если для этого есть варианты использования.

ПРИМЕЧАНИЕ: Чтобы использовать эту функцию немедленно, вам необходимо будет build TensorFlow from source. Новый op будет доступен в следующем выпуске TensorFlow (0.7.0).

Смежные вопросы