Je suis en train de faire un CNN modèle pour la classification binaire d'une image de dataset. Mon modèle/ code fonctionne et donne de très bons résultats (précision élevée), mais je suis incapable de comprendre le input_shape
paramètre pour la 1ère couche de Conv1D
.
La forme de X ou d'entrée (ici x_train_df
) est (2000, 28). Il a 28 caractéristiques et 2000 échantillons. Et la forme de Y ou des étiquettes (ici y_train_df
) est (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)
J'ai donné input_shape
comme (28, 1) (prise de référence à partir de cette question).
Mais dans Conv1D couche de la documentation , il est écrit que,
Lors de l'utilisation de cette couche, la première couche dans un modèle, de fournir un input_shape argument (n-uplet de nombres entiers ou rien", par exemple (10, 128) pour les séquences de 10 vecteurs de 128 dimensions des vecteurs.
Ce que j'ai compris, c'est la dimension de input_shape devrait être (2000, 1) comme je l'ai 2000 à une dimension des vecteurs. Mais en donnant à ce que input_shape
affiche une erreur que,
ValueError: Entrée 0 de la couche "sequential_25" est incompatible avec l' couche: la forme attendue=(None, 2000, 1), a trouvé la forme=(None, 28)
Donc ma question est ce que devrait être la bonne input_shape
?
ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)).
J'ai donc modifié les formes (2000, 28, 1) pourx_train_df
et (2000, 1, 1) poury_train_df
comme indiqué dans le présent et qui ont travaillé. Je suis confus au sujet de cette. Il sera très utile si vous pourriez nous expliquer comment modifier le code en question.