Input_shape de Conv1D capa Keras

0

Pregunta

Estoy tratando de hacer un CNN modelo para la clasificación binaria de una no-imagen de conjunto de datos. Mi modelo/ código de trabajo y que produce muy buenos resultados (precisiones son altos) pero soy incapaz de entender el input_shape parámetro para la 1ª capa de Conv1D.

La forma de X o de entrada (aquí x_train_df) es (2000, 28). Tiene 28 características y 2000 muestras. Y la forma de Y o etiquetas (aquí y_train_df) es (2000, 1).

model = Sequential()
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu', input_shape = (x_train_df.shape[1], 1)))
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu'))
model.add(MaxPooling1D(pool_size = 2))
model.add(Flatten())
model.add(Dense(100, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))

optimzr = Adam(learning_rate=0.005)
model.compile(loss='binary_crossentropy', optimizer=optimzr,  metrics=[[tf.keras.metrics.AUC(curve="ROC", name = 'auc')], [tf.keras.metrics.AUC(curve="PR", name = 'pr')]])

# running the fitting
model.fit(x_train_df, y_train_df, epochs = 2, batch_size = 32, validation_data = (x_val_df, y_val_df), verbose = 2)

Me han dado input_shape como (28, 1) (tomado de referencia a partir de esta pregunta).

Pero en Conv1D capa de documentación está escrito que,

Cuando se utiliza esta capa como la primera capa en un modelo, proporcionar un input_shape argumento (tupla de enteros o Ninguno, por ejemplo, (10, 128) para las secuencias de 10 vectores de 128 dimensiones de los vectores.

Lo que he entendido esta es la dimensión de input_shape debe ser (2000, 1) como he de 2000, de una dimensión de los vectores. Pero dando esto como input_shape se muestra un error como,

ValueError: Entrada 0 de la capa "sequential_25" es incompatible con el capa: de la forma esperada=(None, 2000, 1), que se encuentra de forma=(None, 28)

Así que mi pregunta es ¿cuál debe ser la correcta input_shape?

1

Mejor respuesta

0

Vamos a ver cómo "Conv1D" toma de entrada.

>>> # The inputs are 128-length vectors with 10 timesteps, and the batch size
>>> # is 4.
>>> input_shape = (4, 10, 128)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.Conv1D(
... 32, 3, activation='relu',input_shape=input_shape[1:])(x)
>>> print(y.shape)
    (4, 8, 32)

3+D tensor con la forma: batch_shape + (pasos, input_dim)

Como se ha visto anteriormente, existen 128 características, 10 timesteps y tamaño de lote de 4. Así, Conv1D toma de entrada como (batch_size,timesteps,características). Toma de entrada 3D. Digamos que usted elija el tamaño de lote 1 para su caso. Usted tiene que dar de entrada como (1,2000,28).

2021-11-22 08:00:37

Haciendo la entrada como (1,2000,28) cometió un error como ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)). Así que he cambiado las formas de ser (2000, 28, 1) para x_train_df y (2000, 1, 1) para y_train_df como se muestra en este y que trabajó. Estoy confundido acerca de esto. Va a ser muy útil si usted podría explicar cómo modificar el código de la pregunta.
Badal

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................