este problema se puede abordar de variadas maneras, pero nosotros te mostramos la que para nosotros es la respuesta más completa.
Solución:
Para simplificar, primero señalaría que los llamados mapas de características (1D, 2D, etc.) son nuestros canales regulares. Veamos ejemplos:
-
Dropout()
: Definamos entrada 2D: [[1, 1, 1], [2, 2, 2]]. El abandono considerará cada elemento de forma independiente y puede resultar en algo como [[1, 0, 1], [0, 2, 2]] -
SpatialDropout1D()
: En este caso, el resultado se verá como [[1, 0, 1], [2, 0, 2]]. Observe que el segundo elemento se puso a cero a lo largo todo canales
La forma del ruido
En orden para entender SpatialDropout1D
usted debe acostumbrarse a la noción de la forma de ruido. En el abandono de vainilla simple, cada elemento se mantiene o elimina de forma independiente. Por ejemplo, si el tensor es [2, 2, 2]
, cada uno de los 8 elementos se puede poner a cero dependiendo del lanzamiento aleatorio de la moneda (con cierta probabilidad de “cara”); en total, habrá 8 lanzamientos de monedas independientes y cualquier número de valores puede convertirse en cero, desde 0
a 8
.
A veces es necesario hacer más que eso. Por ejemplo, uno puede necesitar dejar caer el rebanada entera a lo largo de 0
eje. El noise_shape
en este caso es [1, 2, 2]
y el abandono involucra solo 4 lanzamientos de monedas aleatorios e independientes. El primer componente se mantendrá junto o se dejará caer junto. El número de elementos puestos a cero puede ser 0
, 2
, 4
, 6
o 8
. No puede ser 1
o 5
.
Otra forma de ver esto es imaginar que el tensor de entrada es de hecho [2, 2]
, pero cada valor es de precisión doble (o de precisión múltiple). En lugar de descartar los bytes en el medio, la capa elimina el valor completo de varios bytes.
¿Por qué es útil?
El ejemplo anterior es solo ilustrativo y no es común en aplicaciones reales. Un ejemplo más realista es este: shape(x) = [k, l, m, n]
y noise_shape = [k, 1, 1, n]
. En este caso, cada componente de lote y canal se mantendrá de forma independiente, pero cada fila y columna se mantendrán o no juntas. En otras palabras, el entero[l, m]
mapa de características se mantendrá o se abandonará.
Es posible que desee hacer esto para tener en cuenta la correlación de píxeles adyacentes, especialmente en las primeras capas convolucionales. Efectivamente, desea evitar la coadaptación de píxeles con sus vecinos en los mapas de características y hacer que aprendan como si no existieran otros mapas de características. Esto es exactamente lo que SpatialDropout2D
está haciendo: promueve la independencia entre los mapas de características.
El SpatialDropout1D
es muy similar: dado shape(x) = [k, l, m]
usa noise_shape = [k, 1, m]
y suelta mapas completos de características 1-D.
Referencia: Localización eficiente de objetos mediante redes convolucionales por Jonathan Tompson en otros.
Nos encantaría que puedieras comunicar este enunciado si te fue de ayuda.