Я ищу код для языковой модели RNN. Я смущен в отношении 1) как создаются пары обучения (x, y), а затем 2) как вычисляется потеря. Код заимствован из учебника RNN Tensorflow (читатель модуль).Тензорный поток: повторяющиеся пары нейронных сетей и влияние на функцию потерь
Внутри модуля считывателя определен генератор ptb_iterator. Он принимает данные как одну последовательность, а дает x, y пар в соответствии с размером партии и количеством шагов, которые вы хотите «развернуть» RNN. Лучше всего смотреть на все определении первого, но та часть, которая спутать меня это:
for i in range(epoch_size):
x = data[:, i*num_steps:(i+1)*num_steps]
y = data[:, i*num_steps+1:(i+1)*num_steps+1]
yield (x, y)
, которая описана как:
*Yields:
Pairs of the batched data, each a matrix of shape [batch_size, num_steps].
The second element of the tuple is the same data time-shifted to the
right by one.*
Итак, если правильно понял, для последовательности данных [1 2 3 4 5 6]
и num_steps = 2
то для стохастического градиентного спуска (т.е. batch_size = 1) будет генерироваться следующие пары:
- х = [1,2], у = [2,3]
- х = [3,4], у = [5,6]
1) Это правильный способ сделать это? Если это не может быть сделано таким образом, чтобы пары:
- х = [1,2], у = [2,3]
- х = [2,3], у = [3,4] ... # позволяет более точек данных
ИЛИ
- х = [1,2], у = [3]
- х = [2,3], у = [4 ] ... # гарантирует, что все прогнозы сделаны с длиной контекста = num_step s
2) Наконец, учитывая, что пары формируются, как они находятся в reader модуле, когда дело доходит до обучения, будет потеря вычисляться не отражают производительность РНН в течение целого ряда развернутых шагов вместо num_steps
указано?
Например, модель будет делать прогноз для x = 3 (от x = [3,4]), не считая того, что перед ним 2 (т. Е. Разворачивание RNN на один шаг вместо двух).