Тензорные формы вывода декодера и softmax_cross_entropy_with_logits

Я делаю пару encoder_decoder в тензорном потоке. Это генерация текста со стандартным использованием softmax для прогнозирования следующего слова.

stepwise_cross_entropy = tf.nn.softmax_cross_entropy_with_logits( labels = 
    tf.one_hot( decoder_tgt, depth = vocab_size,
    dtype = tf.float32), logits = decoder_logits  )
  • decoder_tgt - целевой текст декодера, вектор идентификаторов слов. tf.one_hot изменяет форму этого вектора с [ num_timesteps, batch_size ] на [num_timesteps, batch_size, vocabulary_size].

  • decoder_logits имеет форму (?,?, vocabulary_size) и поэтому должен быть подходящей формой для наших целей.

  • Данные, которые я использую для проверки этого, имеют длину последовательности 5, размер партии 100 и размер словаря 27994. Таким образом, dec_tgt должен иметь форму [ 5, 100, 27994 ].

Все это кажется чистым, и когда я работаю над этим на бумаге, это чисто. Но когда я запускаю свой график, я получаю сообщение об ошибке:

logits and labels must be same size: logits_size=[1000,27994] labels_size=
[500,27994]

Похоже, что tf.one_hot для меток ошибочно возвращает тензор формы [num_timesteps * batch_size, vocabulary_size] (чего не происходит, если я сам выполняю операцию), а logits возвращает [2*num_timesteps*batch_size, vocabulary_size] без причины пока не вижу.

Я просматривал свой код в течение пары часов и ничего не могу найти.

Код здесь: https://github.com/scottleith/lstm/blob/master/Attempted%20encoder-decoder%20LSTM.py

Конкретный рассматриваемый раздел начинается со строки 246 (формы декодера), хотя проблема может быть в другом месте.

0 ответов

Другие вопросы по тегам