Saltar al contenido

Explicación de entrada de Keras: input_shape, unidades, batch_size, dim, etc.

Te damos la bienvenida a nuestro sitio web, ahora vas a encontrar la resolución a lo que estás buscando.

Solución:

Unidades:

La cantidad de “neuronas” o “células”, o lo que sea que tenga la capa en su interior.

Es una propiedad de cada capa, y sí, está relacionada con la forma de salida (como veremos más adelante). En su imagen, a excepción de la capa de entrada, que es conceptualmente diferente de otras capas, tiene:

  • Capa oculta 1: 4 unidades (4 neuronas)
  • Capa oculta 2: 4 unidades
  • Última capa: 1 unidad

Formas

Las formas son consecuencia de la configuración del modelo. Las formas son tuplas que representan cuántos elementos array o tensor tiene en cada dimensión.

Ex: una silueta (30,4,10) significa un array o tensor con 3 dimensiones, que contiene 30 elementos en la primera dimensión, 4 en la segunda y 10 en la tercera, totalizando 30 * 4 * 10 = 1200 elementos o números.

La forma de entrada

Lo que fluye entre capas son tensores. Los tensores pueden verse como matrices, con formas.

En Keras, la capa de entrada en sí no es una capa, sino un tensor. Es el tensor inicial que envías a la primera capa oculta. Este tensor debe tener la misma forma que tus datos de entrenamiento.

Ejemplo: si tiene 30 imágenes de 50×50 píxeles en RGB (3 canales), la forma de sus datos de entrada es (30,50,50,3). Luego, el tensor de la capa de entrada debe tener esta forma (consulte los detalles en la sección “Formas en keras”).

Cada tipo de capa requiere la entrada con un cierto número de dimensiones:

  • Dense capas requieren entradas como (batch_size, input_size)
    • o (batch_size, optional,...,optional, input_size)
  • Las capas convolucionales 2D necesitan entradas como:
    • si usa channels_last: (batch_size, imageside1, imageside2, channels)
    • si usa channels_first: (batch_size, channels, imageside1, imageside2)
  • Uso de convoluciones 1D y capas recurrentes (batch_size, sequence_length, features)
    • Detalles sobre cómo preparar datos para capas recurrentes

Ahora, la forma de entrada es la única que debe definir, porque su modelo no puede conocerla. Solo tú lo sabes, según tus datos de entrenamiento.

Todas las demás formas se calculan automáticamente en función de las unidades y particularidades de cada capa.

Relación entre formas y unidades: la forma de salida

Dada la forma de entrada, todas las demás formas son resultados de cálculos de capas.

Las “unidades” de cada capa definirán la forma de salida (la forma del tensor que produce la capa y que será la entrada de la siguiente capa).

Cada tipo de capa funciona de una manera particular. Las capas densas tienen una forma de salida basada en “unidades”, las capas convolucionales tienen una forma de salida basada en “filtros”. Pero siempre se basa en alguna propiedad de capa. (Consulte la documentación para conocer los resultados de cada capa)

Vamos a mostrar lo que sucede con las capas “densas”, que es el tipo que se muestra en su gráfico.

Una capa densa tiene una forma de salida de (batch_size,units). Entonces, sí, las unidades, la propiedad de la capa, también define la forma de salida.

  • Capa oculta 1: 4 unidades, forma de salida: (batch_size,4).
  • Capa oculta 2: 4 unidades, forma de salida: (batch_size,4).
  • Última capa: 1 unidad, forma de salida: (batch_size,1).

Pesos

Los pesos se calcularán de forma totalmente automática en función de las formas de entrada y salida. Nuevamente, cada tipo de capa funciona de cierta manera. Pero los pesos serán una matriz capaz de transformar la forma de entrada en la forma de salida mediante alguna operación matemática.

En una capa densa, los pesos multiplican todas las entradas. Es una matriz con una columna por entrada y una fila por unidad, pero esto a menudo no es importante para trabajos básicos.

En la imagen, si cada flecha tuviera un número de multiplicación, todos los números juntos formarían la matriz de peso.

Formas en Keras

Anteriormente, di un ejemplo de 30 imágenes, 50×50 píxeles y 3 canales, con una forma de entrada de (30,50,50,3).

Dado que la forma de entrada es la única que necesita definir, Keras la exigirá en la primera capa.

Pero en esta definición, Keras ignora la primera dimensión, que es el tamaño del lote. Su modelo debería poder trabajar con cualquier tamaño de lote, por lo que solo define las otras dimensiones:

input_shape = (50,50,3)
    #regardless of how many images I have, each image has this shape        

Opcionalmente, o cuando lo requieran ciertos tipos de modelos, puede pasar la forma que contiene el tamaño del lote a través de batch_input_shape=(30,50,50,3) o batch_shape=(30,50,50,3). Esto limita sus posibilidades de entrenamiento a este tamaño de lote único, por lo que debe usarse solo cuando sea realmente necesario.

De cualquier forma que elija, los tensores en el modelo tendrán la dimensión del lote.

Entonces, incluso si usaste input_shape=(50,50,3), cuando keras le envíe mensajes, o cuando imprima el resumen del modelo, se mostrará (None,50,50,3).

La primera dimensión es el tamaño del lote, es None porque puede variar según la cantidad de ejemplos que dé para la capacitación. (Si definió el tamaño del lote explícitamente, el número que definió aparecerá en lugar de None)

Además, en trabajos avanzados, cuando realmente opera directamente en los tensores (dentro de las capas Lambda o en la función de pérdida, por ejemplo), la dimensión del tamaño del lote estará allí.

  • Entonces, al definir la forma de entrada, ignora el tamaño del lote: input_shape=(50,50,3)
  • Al realizar operaciones directamente sobre tensores, la forma volverá a ser (30,50,50,3)
  • Cuando keras te envíe un mensaje, la forma será (None,50,50,3) o (30,50,50,3), dependiendo del tipo de mensaje que le envíe.

Oscuro

Y al final, que es dim?

Si su forma de entrada tiene solo una dimensión, no necesita darla como una tupla, le da input_dim como un número escalar.

Entonces, en su modelo, donde su capa de entrada tiene 3 elementos, puede usar cualquiera de estos dos:

  • input_shape=(3,) – La coma es necesaria cuando solo tiene una dimensión
  • input_dim = 3

Pero cuando se trata directamente con los tensores, a menudo dim se referirá a cuántas dimensiones tiene un tensor. Por ejemplo, un tensor con forma (25,10909) tiene 2 dimensiones.


Definiendo tu imagen en Keras

Keras tiene dos formas de hacerlo, Sequential modelos, o la API funcional Model. No me gusta usar el modelo secuencial, luego tendrás que olvidarlo de todos modos porque querrás modelos con ramas.

PD: aquí ignoré otros aspectos, como las funciones de activación.

Con el modelo secuencial:

from keras.models import Sequential  
from keras.layers import *  

model = Sequential()    

#start from the first hidden layer, since the input is not actually a layer   
#but inform the shape of the input, with 3 elements.    
model.add(Dense(units=4,input_shape=(3,))) #hidden layer 1 with input

#further layers:    
model.add(Dense(units=4)) #hidden layer 2
model.add(Dense(units=1)) #output layer   

Con el modelo API funcional:

from keras.models import Model   
from keras.layers import * 

#Start defining the input tensor:
inpTensor = Input((3,))   

#create the layers and pass them the input tensor to get the output tensor:    
hidden1Out = Dense(units=4)(inpTensor)    
hidden2Out = Dense(units=4)(hidden1Out)    
finalOut = Dense(units=1)(hidden2Out)   

#define the model's start and end points    
model = Model(inpTensor,finalOut)

Formas de los tensores

Recuerde que ignora los tamaños de lote al definir capas:

  • inpTensor: (None,3)
  • hidden1Out: (None,4)
  • hidden2Out: (None,4)
  • finalOut: (None,1)

Dimensión de entrada aclarada:

No es una respuesta directa, pero me acabo de dar cuenta de que la palabra Dimensión de entrada podría ser lo suficientemente confusa, así que tenga cuidado:

(La palabra dimensión sola) puede referirse a:

a) La dimensión de los datos de entrada (o flujo) como el número N de ejes del sensor para transmitir la señal de la serie temporal o el canal de color RGB (3): palabra sugerida => “Dimensión de flujo de entrada”

B) El número total / longitud de las funciones de entrada (o capa de entrada) (28 x 28 = 784 para la imagen en color MINST) o 3000 en los valores de espectro transformados por FFT, o

“Capa de entrada / Dimensión de entidad de entrada”

c) El dimensionalidad (# de dimensión) de la entrada (típicamente 3D como se esperaba en Keras LSTM) o (#RowofSamples, #of Senors, #of Values ​​..) 3 es la respuesta.

“N dimensionalidad de la entrada”

d) El Forma de entrada ESPECÍFICA (por ejemplo, (30,50,50,3) en estos datos de imagen de entrada sin envolver, o (30, 250, 3) si no están envueltos
Keras:

Keras tiene su input_dim se refiere a la dimensión de la capa de entrada / número de característica de entrada

model = Sequential()
model.add(Dense(32, input_dim=784))  #or 3 in the current posted example above
model.add(Activation('relu'))

En Keras LSTM, se refiere al total de Pasos de tiempo

El término ha sido muy confuso, es correcto y vivimos en un mundo muy confuso !!

Encuentro que uno de los desafíos en el aprendizaje automático es lidiar con diferentes idiomas o dialectos y terminologías (por ejemplo, si tiene 5-8 versiones de inglés muy diferentes, entonces necesita un nivel muy alto para conversar con diferentes hablantes). Probablemente esto también sea lo mismo en los lenguajes de programación.

Calificaciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *