Преобразование doc2vec из feed-dict в конвейер tf.data - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь преобразовать пример doc2vec из использования feed-dict в использование конвейера tf.data. Я изо всех сил, как реализовать генерацию последовательности окон.

Мне удалось реализовать все методы загрузки данных в text_helpers.py , но я не могу понять, как справиться с методом generate_batch_data. Любые указатели будут с благодарностью.

Я пытался использовать tf.string.split, чтобы разбить предложение на слова, но затем я не могу получить форму результата, чтобы использовать его для задания диапазона, проходящего через ws. (См. Ниже). Выдает ошибку. потому что это None, а не целое число. Я предполагаю, что строки для append переменной window_sequences также не будут работать.

ОБНОВЛЕНИЕ: Добавлен мой код в репозиторий github. https://github.com/waldren/doc2vec-datapipeline

ОБНОВЛЕНИЕ: Я думаю, что движусь в правильном направлении. Теперь у меня есть tf. while_loop

   def generate_window_sequence(self, sentence_ix, sentence, label):

    ws = tf.strings.split([sentence], sep=' ').values

    offset = tf.constant(int(self.window_size/2))
    i = tf.constant(int(self.window_size/2))

    def while_condition (i, window_sequences, ws, offset):
      return tf.less(i, tf.math.subtract(tf.size(ws), offset))

    def body(i, window_sequences, ws, offset):
      #TODO - move within offset if it is > 1
      before = tf.math.subtract(i, offset)
      after = tf.math.add(i, offset)
      #window_sequences.append((tf.gather(ws, [before, i])))
      #window_sequences.append((tf.gather(ws, [after, i])))

      return i+1, window_sequences, ws, offset

    window_sequences = []
    window_sequences.append(("before1","test1"))
    i, window_sequences, ws, offset = tf.while_loop(while_condition, body, [i, window_sequences, ws, offset])

    return sentence_ix, window_sequences, label

Это будет "работать", но я не знаю, работает ли цикл несколько раз. Но как только я раскомментирую две строки в функции body (начиная с window_sequence), я получаю ошибку ValueError: Number of inputs and outputs of body must match loop_vars: 5, 7.

...