версии: Python 3.6.9, Tensorflow 2.0.0, CUDA 10.0, CUDNN 7.6.1, версия драйвера Nvidia 410.78.
Я пытаюсь перенести модель Seq2Seq tf.keras на основе LSTM на tensorflow 2.0
Прямо сейчас я сталкиваюсь со следующей ошибкой, когда пытаюсь вызвать predict
в модели декодера (см. Ниже фактический код настройки вывода)
Это как если бы он ожидал одно слово в качестве аргумента, но мне нужно, чтобы он декодировал полное предложение (мои предложения представляют собой правую последовательность индексов слов длиной 24)
P.S .: Этот код работал точно так же на TF 1.15.
InvalidArgumentError: [_Derived_] Inputs to operation while/body/_1/Select_2 of type Select must have the same size and shape.
Input 0: [1,100] != input 1: [24,100]
[[{{node while/body/_1/Select_2}}]]
[[lstm_1_3/StatefulPartitionedCall]] [Op:__inference_keras_scratch_graph_45160]
Function call stack:
keras_scratch_graph -> keras_scratch_graph -> keras_scratch_graph
ПОЛНАЯ МОДЕЛЬ
Модель вывода ENCODER
Модель вывода DECODER
Настройка вывода (строка, в которой действительно происходит ошибка)
Важная информация: последовательности дополняются справа до 24 элементов, а 100 - это количество измерений для каждого встраиваемого слова. Вот почему сообщение об ошибке (и распечатки) показывают, что входные формы (24,100)
.
обратите внимание, что этот код работает на ЦП. запуск его на графическом процессоре приводит к другой ошибке, подробно описанной здесь
# original_keyword is a sample text string
with tf.device("/device:CPU:0"):
# this method turns the raw string into a right-padded sequence
query_sequence = keyword_to_padded_sequence_single(original_keyword)
# no problems here
initial_state = encoder_model.predict(query_sequence)
print(initial_state[0].shape) # prints (24, 100)
print(initial_state[1].shape) # (24, 100)
empty_target_sequence = np.zeros((1,1))
empty_target_sequence[0,0] = word_dict_titles["sos"]
# ERROR HAPPENS HERE:
# InvalidArgumentError: [_Derived_] Inputs to operation while/body/_1/Select_2 of type Select
# must have the same size and shape. Input 0: [1,100] != input 1: [24,100]
decoder_outputs, h, c = decoder_model.predict([empty_target_sequence] + initial_state)
Что я пробовал
отключение активного режима (это только сделало обучение намного медленнее, а ошибка во время вывода осталась прежней)
изменение формы ввода перед передачей его функции прогнозирования
ручное вычисление (
embedding_layer.compute_mask(inputs)
) и установка масок при вызове слоев LSTM
False
. Для декодера этоTrue
. Вот полный код: gist.github.com/queirozfcom/20d76e3113c649660df8dc1e59455680 - person Felipe   schedule 21.11.2019decoder_inputs
наdecoder_inputs = tf.keras.layers.Input(shape=(None,),name="decoder_input")
. Ошибка возникает из-за того, чтоempty_target_sequence
имеет форму(1,1)
, в то время как ваш декодер ожидает ввода формы(?,24)
. - person Siddhant Tandon   schedule 26.11.2019