Допустим, у вас есть данные временных рядов с строками и 700 столбцами, которые вы хотите передать слою в Keras. Прежде чем передать это в RNN, вам нужно преобразовать предыдущие данные в 3D-тензор. Таким образом, это становится N × 700 × 1 .N700SimpleRNN(200, return_sequence=True)
N× 700 × 1
Изображение взято с https://colah.github.io/posts/2015-08-Understanding-LSTMs
т = 1 т о 700 час1час700час1час200N× 700 × 200
TimeDistributedDense
Dense
Dense
h1h2hth1h7001×1×2001×1×200
Почему мы это делаем? Потому что вы не хотите сглаживать вывод RNN.
Почему бы не сгладить выход RNN? Потому что вы хотите, чтобы значения каждого временного шага были отдельными.
Зачем хранить значения каждого временного шага отдельно? Потому что:
- вы только хотите взаимодействовать значения между его собственным временным шагом
- Вы не хотите случайного взаимодействия между различными временными шагами и каналами.