2016-07-31 6 views
0

Мне нужно запустить модель кодировщика-декодера в Tensorflow. Я вижу, что с использованием доступных API basic_rnn_seq2seq(encoder_input_data, decoder_input_data, lstm_cell) и т. Д. Может быть создана система кодировщика-декодера.Как запустить пользовательское обучение seq2seq (используя предварительно рассчитанные вложения слов) encoder-decoder в Tensorflow?

  1. Как мы можем ввести такие вложения, как word2vec в такой модели? Я знает, что мы можем выполнять поиск встраивания, но согласно API encoder_input_data - это список 2D-тензора размера batch_size x input_size. Как каждое слово может быть представлено с использованием соответствующего встраивания слов в эту настройку? Даже embedding_rnn_seq2seq внутренне извлекает вложения. Как предоставить предварительно рассчитанные вложения слов в качестве входных данных?
  2. Как мы можем получить стоимость/недоумение через API?
  3. В случае тестовых примеров мы можем не знать соответствующие входы декодера. Как обращаться с таким случаем?

ответ

3

Первый вопрос: Наверное, не самый лучший способ, но то, что я был, после построения модели, перед тренировкой начинается:

for v in tf.trainable_variables(): 
    if v.name == 'embedding_rnn_seq2seq/RNN/EmbeddingWrapper/embedding:0': 
    assign_op = v.assign(my_word2vec_matrix) 
    session.run(assign_op) # or `assign_op.op.run()` 

my_word2vec_matrix представляет собой матрицу размера формы vocabularysize х вложений и заполненного в моих предварительно вычисленных вложения-векторах. Используйте это (или что-то подобное), если вы считаете, что ваши вложения действительно хороши. В противном случае seq2seq-Model со временем будет иметь свое собственное обученное вложение.

Второй вопрос: В seq2seq.py есть вызов model_with_buckets(), который вы можете найти в python/ops/seq2seq.py. Оттуда возвращается потеря.

Третий вопрос: В тестовом примере каждый вход декодера является декодером, выводимым с момента времени до (т.е. первый вход декодера является специальным символом GO, второй вход декодера является выходом декодера первого тайм-сигнала, третий вход декодера является выходом декодера второго временного интервала и т. д.)

+0

Хорошо, спасибо. Итак, где мы будем кормить my_word2vec_matrix в API? Является ли encoder_cell (in embedding_attention_seq2seq) матрицей внедрения, которую нужно заменить на tf.embedding_lookup? – user3480922

+0

Функция embedding_rnn_seq2seq - это автоматически. Кстати, вам нужно исправить имя в моем фрагменте от embedding_attention_seq2seq до embedding_rnn_seq2seq – friesel

+0

С «автоматически» я имею в виду: в embedding_rnn_seq2seq используется матрица внедрения. Мой assign_op присваивает ВАШ матрицу матрице встраивания, используемой в модели – friesel