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

Я работаю над созданием предсказателя Шекспира от последовательности к последовательности и смотрю на пример кода, который, кажется, выполняет группировку в группах по 50 символов. Я немного смущен этим. Если текст непрерывный, и вы обрабатываете куски по 50 символов, то это, безусловно, означает, что вы когда-либо рассчитываете потери только на основе следующего ожидаемого символа после 50-го символа, и модель никогда не обучается следующим ожидаемым символам для остальные 49 символов. Другими словами, если у вас есть 1000 символов с 20 наборами по 50 символов, учат предсказывать только 20 различных символов. Разве эти партии не должны смещаться на случайное смещение в каждую эпоху, чтобы он научился предсказывать других персонажей?

Это не может быть правдой, конечно? Что мне здесь не хватает в моем понимании?

Кроме того, всегда ли партии обрабатываются последовательно? Когда состояние переносится для представления предыдущих последовательностей, это, безусловно, важно.

Спасибо Рэй

Обновление 7/24: вот оригинальный код...

    self.num_batches = int(self.tensor.size / (self.batch_size *
                                               self.seq_length))

    # When the data (tensor) is too small,
    # let's give them a better error message
    if self.num_batches == 0:
        assert False, "Not enough data. Make seq_length and batch_size small."

    self.tensor = self.tensor[:self.num_batches * self.batch_size * self.seq_length]
    xdata = self.tensor
    ydata = np.copy(self.tensor)
    ydata[:-1] = xdata[1:]
    ydata[-1] = xdata[0]
    self.x_batches = np.split(xdata.reshape(self.batch_size, -1),
                              self.num_batches, 1)
    self.y_batches = np.split(ydata.reshape(self.batch_size, -1),
                              self.num_batches, 1)

Насколько я вижу, это не похоже на совпадение, но я новичок в Python, поэтому, может быть, чего-то не хватает.

1 ответ

Решение

Если у вас есть 1000 chars и если вы создадите 20 sets из 50 chars, это становится неперекрывающимся окном, и, как вы сказали, оно не будет работать. Вместо этого вы рассматриваете перекрывающееся окно путем сдвига на один символ и создаете (1000-50) sets данных обучения. Это правильный способ сделать это.

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