Keras capas de tutorial y muestras.

Estoy tratando de codificar y aprender diferentes modelos de redes neuronales. Estoy teniendo muchas complicaciones con la dimensionalidad de entrada. Estoy buscando un tutorial que muestre las diferencias en las capas y cómo configurar entradas y salidas para cada capa.

La documentación de Keras le muestra todas las input_shape espera cada capa.

En Keras, verás formas de entrada en estas formas:

  • input_shape definido por el usuario en capas
  • Formas mostradas en resúmenes y otros.
  • formas de matriz
  • formas tensoriales

La forma de entrada definida por el usuario y las formas pasadas a las capas de Reshape :

La forma de entrada definida ignorará el tamaño del lote, solo requerirá el tamaño de una muestra individual de datos.

Por ejemplo, cuando define una capa Dense , input_shape su input_shape como (10,) , lo que significa que espera diez valores numéricos como entrada.

Formas mostradas por keras en general:

Estos tendrán una None como primera dimensión. Esto simboliza el tamaño del lote que usas para el entrenamiento. Un lote es una matriz con muchos ejemplos de datos. Dado que el tamaño del lote es libre y solo se define cuando se pasa un lote para entrenamiento, Keras lo muestra como None .

En esa capa densa, Keras mostraría (None, 10) como forma de entrada.

Formas de matriz:

Durante el entrenamiento, la predicción, etc., cuando realmente tenga un lote y, por lo tanto, su tamaño, keras mostrará en los mensajes de error la forma real del lote, que será (Tamaño de lote, … otras dimensiones …).

Para nuestro Dense(10) , suponga que pasó un lote con 300 muestras para entrenamiento, entonces las keras mostrarían mensajes de error que contienen forma (300,10)

Tensor de formas:

Las formas de tensor aparecerán en un uso más avanzado, cuando esté creando capas Lambda o capas personalizadas, y al crear funciones personalizadas de pérdida.

Las formas tensoriales seguirán la idea de tener el tamaño de lote como la primera dimensión. Entonces, recuerde que cuando trabaje directamente con los tensores, tendrán forma (BatchSize, ...other dimensions...) .

Algunas de las capas más comunes y sus formas de entrada:

Ahora que conoce esas diferencias, seguiré usando el formulario con None continuación. Recuerde ignorar la parte Ninguna al definir input_shape .

Denso

La capa densa toma generalmente valores únicos, no matrices como entradas, por lo tanto, su forma de entrada es: (None, AnyNumberOfInputValues)

La salida será similar: (None, NumberOfNeuronsInThisLayer)

Conv1D

Una capa convolucional con una sola dimensión. Cuando se usan circunvoluciones, la idea es tener canales.

Imagina un archivo de sonido, contiene dos canales, izquierdo y derecho. Cada canal es una matriz de valores correspondientes a la forma de onda.

Keras le ofrece la opción de tener channels_first o channels_last , esto cambia la entrada y salida de las capas:

  • Con canales primero: (None, channels, length)
  • Con los últimos canales: (None, length, channels)

La salida también sigue la configuración de “channels_first / channels_last”, y sigue así: (None, NumberOfFilters, ResultingLength) – con canales primero

La configuración predeterminada es “channels_last”, y puede definirla en cada capa o en el archivo keras.json

Conv2D:

La misma idea que Conv1D, usando canales, ya sea con los canales primero o los canales últimos. Pero ahora, tiene dos dimensiones, como imágenes, siendo cada canal comparado con los colores Rojo, Verde y Azul.

  • Con canales primero: (None, channels, pixelsX, pixelsY)
  • Con los últimos canales: (None, pixelsX, pixelsY, channels)

La salida, siguiendo la configuración de “channels_firts / channels_last”, es como (None, NumberOfFilters, resultPixelsX, resultPixelsY) para channels_first.

Capas recurrentes:

Las capas Lstm son difíciles de entender. Tienen algunas opciones que usan diferentes formas de entrada, y hay algunos tutoriales interesantes sobre eso, como este y este también .

Normalmente, las formas de entrada son (None, TimeSteps, InputDimension)

Como LSTM es para secuencias, puede separar las secuencias en pasos de tiempo. La dimensión de entrada es solo una posibilidad de tener valores multidimensionales.

La salida también varía dependiendo de las opciones elegidas. Puede ser (None, Timesteps, NumberOfCellsInTheLeyr) o solo (None, NumberOfCells) , dependiendo de si elige devolver las secuencias o no.