Внедрение Tensorflow для обучения и вывода - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь закодировать простой машинный перевод Neural с использованием тензорного потока.Но я немного застрял в понимании вложения в тензорный поток:

  • Я не понимаю разницу между tf.contrib.layers.embed_sequence(inputs, vocab_size=target_vocab_size,embed_dim=decoding_embedding_size)

и

 dec_embeddings = tf.Variable(tf.random_uniform([target_vocab_size, decoding_embedding_size]))
 dec_embed_input = tf.nn.embedding_lookup(dec_embeddings, dec_input)

В каком случае я должен использовать один к другому?

  • Второе, что я не понимаю, - это tf.contrib.seq2seq.TrainingHelper и tf.contrib.seq2seq.GreedyEmbeddingHelper.Я знаю, что в случае перевода мы используем главным образом TrainingHelper для шага обучения (используйте предыдущую цель, чтобы предсказать следующую цель) и GreedyEmbeddingHelper для шага вывода (используйте предыдущий временной шаг, чтобы предсказать следующую цель).Но я не понимаю, как это работает.В частности, используются разные параметры.Например, почему нам нужна длина последовательности в случае TrainingHelper (почему мы не использовали EOS)?Почему они оба не используют embedding_lookup или embedding_sequence в качестве входных данных?

1 Ответ

0 голосов
/ 18 февраля 2019

Если я правильно вас понимаю, первый вопрос касается различий между tf.contrib.layers.embed_sequence и tf.nn.embedding_lookup.

Согласно официальным документам (https://www.tensorflow.org/api_docs/python/tf/contrib/layers/embed_sequence),

Типичным вариантом использования будет повторное использование вложений между кодером и декодером.

Я думаю, tf.contrib.layers.embed_sequence предназначен для моделей seq2seq.

Я нашел следующий пост:

, где @ispirmustafa упомянул:

embedding_lookup не поддерживает недопустимые идентификаторы.

Также, в другом посте: tf.contrib.layers.embed_sequence () для чего?

@ user1930402 сказал:

  1. При построении нейронныхСетевая модель, которая имеет несколько шлюзов, которые принимают функции в качестве входных данных, с помощью tenorflow.contrib.layers.embed_sequence, вы можете уменьшить количество параметров в вашей сети, сохраняя при этом глубину. Например, она устраняет необходимость для каждого шлюза LSTM длявыполнить собственную линейную проекцию функций.
  2. Он допускает произвольные формы ввода, что помогает реализации быть простой и гибкой.

По второму вопросу, извините, что я не использовал TrainingHelperи не могу ответить на ваш вопрос.

...