Ошибка генератора, помогите понять пожалуйста!

Я изучаю генерацию текста при помощи модели Sequence-to-Sequence и столкнулся с проблемой, которую не могу решить. Описание : Обучаю нейросеть на базе вопросов и ответов. Когда подготавливаю раскодированные данные получаю следующие размерности тензоров:

tokenizedAnswers = tokenizer.texts_to_sequences(answers)    ### разбиваем текст ответов на последовательности индексов

for i in range(len(tokenizedAnswers)) :    
  tokenizedAnswers[i] = tokenizedAnswers[i][1:]    #### для разбитых на последовательности ответов избавляемся от тега START

paddedAnswers = pad_sequences(tokenizedAnswers, maxlen=maxLenAnswers , padding='post')   ### Делаем последовательности одной длины, заполняя нулями более короткие ответы

decoderForOutput = utils.to_categorical(paddedAnswers, vocabularySize)    ### переводим в one hot vector

На этом этапе в переменной paddedAnswers находится двумерный numpy тензор, размером (4594, 25) что соответствует моей базе, а в переменной decoderForOutput находится трехмерный numpy тензор, размером (4594, 25, 10785). Что тоже соответствует моей базе.

paddedAnswers.shape   ### (4594, 25)
decoderForOutput.shape   ### (4594, 25, 10785)

Здесь же с целью экономии памяти я бы хотел использовать генераторы Python. Для этой цели я создаю две функции генератора

def generator_from_two_dimensional_tensor(arg):
  for i in range(arg.shape[0]):
    for j in range(arg.shape[1]):
      yield arg[i, j]

def generator_from_three_dimensional_tensor(arg):
  for i in range(arg.shape[0]):
    for j in range(arg.shape[1]):
      for k in range(arg.shape[2]):
        yield arg[i, j, k]

И подставляю эти функции в свой код следующим образом. Так же из токенизированных ответов тоже делаю генератор:

tokenizedAnswer = tokenizer.texts_to_sequences(answers)
for i in range(len(tokenizedAnswer)):
  tokenizedAnswer[i] = tokenizedAnswer[i][1:]
  
generator_tokenized_answers = (x for x in tokenizedAnswer)
gen_paddedAnswers = generator_from_two_dimensional_tensor(pad_sequences([x for x in generator_tokenized_answers], maxlen=maxLenAnswers , padding='post'))

decoderForOutput = generator_from_three_dimensional_tensor(utils.to_categorical([x for x in gen_paddedAnswers], vocabularySize))

Код срабатывает, никакую ошибку не выдаёт. Но в момент, когда пытаюсь обучить сеть, я получаю ошибку:

history = model.fit([[x for x in gen_encoderForInput], [y for y in gen_decoderForInput]], [z for z in decoderForOutput], batch_size=50, epochs=20)

<ipython-input-6-a3a67c64deaf> in generator_three_tensor(arg)
      2   for i in range(arg.shape[0]):
      3     for j in range(arg.shape[1]):
----> 4       for k in range(arg.shape[2]):
      5         yield arg[i, j, k]
      6 

IndexError: tuple index out of range

Для меня до сих пор остаётся загадкой, почему так происходит...


Ответы (0 шт):