Quiero hacer una clasificación de etiquetas múltiples (20 etiquetas de salida distintas), basada en palabras vectorizadas usando TfidfVectorizer. Tengo un conjunto de 39974 filas, cada una de las cuales contiene 2739 elementos (ceros o unos).
Me gustaría clasificar estos datos usando el modelo Keras que contendrá 1 capa oculta (~20 nodos con activación = 'relu') y la capa de salida equivale a 20 valores de salida posibles (con activación = 'softmax' para elegir el mejor ajuste).
Aquí está mi código hasta ahora:
model = Sequential() model.add(Dense(units=20, activation='relu', input_shape=tfidf_matrix.shape)) model.add(Dense(units=20, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(tfidf_matrix, train_data['cuisine_id'], epochs=10)Pero obtuve un error:
ValueError: error al verificar la entrada: se esperaba que dense_1_input tuviera 3 dimensiones, pero obtuvo una matriz con forma (39774, 2739)
¿Cómo puedo especificar que este NN se ajuste al uso de esta matriz?
El número de filas (número de muestras de entrenamiento) no es parte de la forma de entrada de la red porque el proceso de entrenamiento alimenta la red con una muestra por lote (o, más precisamente, muestras de tamaño de lote por lote).
Entonces, en su caso, la forma de entrada de la red es (2739, ) y el código correcto debería ser así:
model = Sequential() # the shape of one training example is input_shape = tfidf_matrix[0].shape model.add(Dense(units=20, activation='relu', input_shape=input_shape)) model.add(Dense(units=20, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(tfidf_matrix, train_data['cuisine_id'], epochs=10)