es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo preparar datos para una CNN unidimensional (1D).

Estaba preguntándome si alguien podría aclarar mi confusión. Tengo este código:

“`python
def create_data(df):

logits = []
labels = []

for x in range(df.shape[0]):

current = df.iloc[x]

logits.append(np.array([current["Taste"], current["Look"]]))
labels.append(current["Score"])

return np.array(logits), np.array(labels)

X, y = create_data(df)

Tx, Testx, Ty, Testy = train_test_split(X, y, train_size=0.8)

def create_model():

model = Sequential()
model.add(Conv1D(128, 3, input_shape=(2,1), activation=’relu’))
model.add(MaxPool1D())
model.add(Conv1D(64,3,activation=’relu’))
model.add(MaxPool1D())
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(64,activation=’relu’))
model.add(Dense(1,activation=’relu’))

return model

model = create_model()
model.compile(optimizer=’adam’, loss=’mse’, metrics=[‘accuracy’])

model.fit(Tx, Ty, batch_size=10, epochs=10)

y obtengo este error:

ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 2)

Sé que tiene algo que ver con cómo estoy preparando mis datos. Pero estoy muy confundido. Al investigar, se menciona mucho los pasos de tiempo, pero ¿cómo se aplica al clasificar vectores?

La pregunta que espero que se responda es ¿cómo preparo los datos correctamente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que los datos de entrada del modelo no están en el formato correcto. El modelo espera una entrada tridimensional con forma (tamaño_lote, pasos_temporales, características), pero los datos de entrada tienen una forma de (tamaño_lote, características).

    Para resolver este error, es necesario dar forma nuevamente a los datos de entrada para tener una tercera dimensión para los pasos temporales. En su caso, puede agregar una tercera dimensión a los datos de entrada utilizando el método numpy.reshape(). Debe dar forma nuevamente a ‘Tx’ y ‘Testx’ para que tengan una forma de (tamaño_lote, 2, 1).

    Puede modificar su código para dar forma nuevamente a los datos de entrada de la siguiente manera:

    Tx = Tx.reshape(Tx.shape[0], Tx.shape[1], 1)
    Testx = Testx.reshape(Testx.shape[0], Testx.shape[1], 1)
    

    Este código agregará una dimensión adicional a ‘Tx’ y ‘Testx’ para hacerlos tridimensionales con una forma de (tamaño_lote, 2, 1).

    Después de dar forma nuevamente a los datos de entrada, puede continuar entrenando su modelo como antes.

Comments are closed.