Error de valor: la entrada 0 de la capa “secuencial_41” no es compatible con la capa: se esperaba la forma=(Ninguno, 70, 23, 1), se encontró la forma=(Ninguno, 23, 1)
El shape de X_train es 70,23,1
Cuando ajusto mi modelo, obtengo un ValueError: “La entrada 0 de la capa “sequential41″ no es compatible con la capa: se esperaba una forma=(None, 70, 23, 1), se encontró una forma=(None, 23, 1)”
import tensorflow.keras as keras
input_shape=(X_train.shape[0],X_train.shape[1],X_train.shape[2])
model=keras.Sequential()
# primera capa
model.add(keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=input_shape))
model.add(keras.layers.MaxPool2D((3,3),strides=(2,2),padding='same'))
model.add(keras.layers.BatchNormalization())
# segunda capa
model.add(keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=input_shape))
model.add(keras.layers.MaxPool2D((3,3),strides=(2,2),padding='same'))
model.add(keras.layers.BatchNormalization())
# tercera capa
model.add(keras.layers.Conv2D(32,(2,2),activation='relu',input_shape=input_shape))
model.add(keras.layers.MaxPool2D((2,2),strides=(2,2),padding='same'))
model.add(keras.layers.BatchNormalization())
# aplanar
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(64,activation='relu'))
model.add(keras.layers.Dropout(0.3))
# salida
model.add(keras.layers.Dense(3,activation='softmax')) # aquí he creado las capas
# compilar
optimizer=keras.optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=optimizer,loss="sparse_categorical_crossentropy",metrics=['accuracy'])
model.fit(X_train,y_train,validation_data=(X_validation,y_validation),batch_size=32,epochs=50)
davy.ai
El modelo espera una forma de entrada de (None, 70, 23, 1), lo que significa 70 filas, 23 columnas y 1 canal. Sin embargo, la forma de los datos de entrada que se están alimentando durante el entrenamiento es (None, 23, 1), lo que significa 23 filas y 1 canal. Esto está causando el ValueError.
Para solucionar esto, el parámetro input_shape en el código debe ajustarse de la siguiente manera:
input_shape=(X_train.shape[1], X_train.shape[2], 1)
Esto creará una forma de entrada de (None, 23, 1, 1), que coincide con las dimensiones segunda y tercera de los datos de entrada que se están alimentando al modelo durante el entrenamiento.