1 votos

¿Por qué no se pueden mezclar insumos de tamaño variable en el mismo minilote?

Estoy intentando construir una arquitectura CNN-LSTM en tf.keras que clasifique secuencias de diferentes tamaños. Mis datos de entrenamiento son muy variables y tendría que recortar/recoger secuencias para crear minibatches de tamaño similar de la misma longitud de secuencia respectivamente.

De ahí mi pregunta:

¿Qué importancia tiene tener minilotes de secuencias de la misma longitud? ¿Se debe esto a alguna propiedad inherente a la forma en que se procesan los datos de los tensores (es decir, obtendré un error) o es más bien una consideración de rendimiento (es decir, paralelizabilidad) que puede descartarse si es necesario?

Muchas gracias.

Tom

3voto

Kayton Knax Puntos 21

Esto es definitivamente sobre el rendimiento. Si no se hace un lote por longitud, se realizan cálculos inútiles cuyos resultados se ignoran de todos modos.

Recuerda que un tensor tiene que ser rectangular, no puede tener un borde irregular. (Generaliza esto a dimensiones superiores según sea necesario.) Pero las secuencias tienen diferentes longitudes. El relleno se utiliza para eliminar el borde irregular, pero el cálculo sobre el relleno es inútil. Queremos minimizar el cómputo desperdiciado, por lo que agrupamos por longitud.


Considere el siguiente conjunto de datos de seis secuencias. Cada fila es una secuencia, y cada X representa un elemento de la secuencia:

X
XXXXX
XX
XX
XXX
X

Recuerde que nuestro CNN corre a lo largo del eje temporal de nuestra secuencia. Para las secuencias por lotes, corremos hasta la longitud de la secuencia más larga de nuestro lote. Cuando las secuencias tienen longitudes diferentes, utilizamos el relleno. Pero si los datos se agrupan de forma diferente, las longitudes totales de los lotes pueden ser diferentes.

Cantidad de trabajo de base (sin relleno, sin lote)

Veamos el trabajo que necesita que hay que hacer. Tenemos que procesar 14 elementos en nuestras 6 secuencias. Si lo hacemos por lotes, podemos acelerar este proceso, pero puede que acabemos haciendo un trabajo extra.

Opción 1: No agrupar por longitudes

Vamos a hacer un lote tal cual, con un tamaño de lote de 2. Usaré . para representar el relleno.

X....
XXXXX

XX
XX

XXX
X..

Si ejecutamos nuestra CNN en esto, terminamos haciendo 5+2+3=10 unidades de trabajo recorriendo estas secuencias. Eso podría no ser óptimo; ¡mira todo el trabajo innecesario que hicimos en la primera secuencia!

Opción 2: Agrupación por longitud

Agrupemos por longitudes lo mejor posible, manteniendo el tamaño del lote 2.

X
X

XX
XX

XXXXX
XXX..

Esta vez, sólo hacemos 1+2+5=8 unidades de trabajo. La otra opción era un 25% más lenta, perdiendo su tiempo en cálculos que nunca necesitábamos hacer. Se corrió en el acolchado, por lo que acabaríamos tirándolo de todos modos.


Evidentemente, se trata de un ejemplo de juguete. Para conjuntos de datos más grandes, el problema es más extremo, ya que la relación entre las longitudes de las secuencias más largas y las medias en un lote puede ser mayor.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X