Разница между `Dense` и` TimeDistributedDense` `Keras`


34

Я до сих пор путаю о разнице между Denseи TimeDistributedDenseиз Kerasхотя есть уже задавали некоторые подобные вопросы здесь и здесь . Люди много обсуждают, но нет общих согласованных выводов.

И даже здесь @fchollet заявил, что:

TimeDistributedDenseприменяет одну и ту же Dense(полностью подключенную) операцию к каждому временному шагу трехмерного тензора.

Мне все еще нужна подробная иллюстрация о том, в чем именно разница между ними.

Ответы:


41

Допустим, у вас есть данные временных рядов с строками и 700 столбцами, которые вы хотите передать слою в Keras. Прежде чем передать это в RNN, вам нужно преобразовать предыдущие данные в 3D-тензор. Таким образом, это становится N × 700 × 1 .N700SimpleRNN(200, return_sequence=True)N×700×1

развернутый рнн

Изображение взято с https://colah.github.io/posts/2015-08-Understanding-LSTMs

t=1 to 700h1h700h1h200N×700×200

TimeDistributedDenseDenseDenseh1h2hth1h7001×1×2001×1×200

Почему мы это делаем? Потому что вы не хотите сглаживать вывод RNN.

Почему бы не сгладить выход RNN? Потому что вы хотите, чтобы значения каждого временного шага были отдельными.

Зачем хранить значения каждого временного шага отдельно? Потому что:

  • вы только хотите взаимодействовать значения между его собственным временным шагом
  • Вы не хотите случайного взаимодействия между различными временными шагами и каналами.

И затем, когда вы применяете TimeDistributedDense, вы применяете слой Dense на каждый временной шаг -> Это значит, что каждый временной шаг делит вес слоя Dense? С плотным слоем это не относится только к последнему временному шагу?
o0omycomputero0o

2
Почему TimeDistributedDense не используется в примере Keras на blog.keras.io/… ?
user1934212

Потому что TimeDistributedDense уже устарела. Поскольку Keras 2.0 Плотные может обрабатывать> 2-мерный тензор хорошо
rilut
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.