La diferencia entre `Dense` y` TimeDistributedDense` de `Keras`

34

Todavía estoy confundido acerca de la diferencia entre el Densey el TimeDistributedDensede Kerasa pesar de que ya hay algunas preguntas similares pide aquí y aquí . La gente está discutiendo mucho pero no hay conclusiones acordadas en común.

Y aunque, aquí , @fchollet declaró que:

TimeDistributedDenseaplica una misma Denseoperación (totalmente conectada) a cada paso de tiempo de un tensor 3D.

Todavía necesito una ilustración detallada sobre cuál es exactamente la diferencia entre ellos.

fluidez03
fuente

Respuestas:

41

Supongamos que tiene datos de series temporales con filas y 700 columnas que desea alimentar a una capa en Keras. Antes de alimentar eso a la RNN, debe cambiar la forma de los datos anteriores a un tensor 3D. Entonces se convierte en un N × 700 × 1 .norte700SimpleRNN(200, return_sequence=True)norte×700×1

RNN desenrollado

La imagen está tomada de https://colah.github.io/posts/2015-08-Understanding-LSTMs

t=1 to 700h1h700h1h200norte×700×200

TimeDistributedDenseDenseDenseh1h2hth1h7001×1×2001×1×200

¿Por qué estamos haciendo esto? Porque no quieres aplanar la salida RNN.

¿Por qué no aplanar la salida RNN? Porque desea mantener los valores de cada paso de tiempo separados.

¿Por qué mantener separados los valores de cada paso de tiempo? Porque:

  • solo desea interactuar los valores entre su propio paso de tiempo
  • no desea tener una interacción aleatoria entre diferentes pasos de tiempo y canales.
rilut
fuente
Y luego, cuando aplica un TimeDistributedDense, está aplicando una capa densa en cada paso de tiempo -> ¿Esto significa que cada paso de tiempo comparte el peso de la capa densa? Con la capa Densa, ¿no se aplica solo al último paso de tiempo?
o0omycomputero0o
2
¿Por qué no se utiliza TimeDistributedDense en el ejemplo de Keras en blog.keras.io/… ?
user1934212
Porque TimeDistributedDense ya está en desuso. Desde Keras 2.0, Dense puede manejar> bien el tensor bidimensional
rilut