Input_shape de Conv1D couche Keras

0

La question

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?

1

La meilleure réponse

0

Nous allons vérifier comment le "Conv1D" prend en entrée.

>>> # 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 tenseur de la forme: batch_shape + (étapes, input_dim)

Comme vu ci-dessus, il y a 128 caractéristiques, 10 échéances et la taille du lot de 4. Donc, Conv1D prend en entrée comme (batch_size,échéances,les caractéristiques). Il prend d'entrée 3D. Disons que vous choisissez la taille du lot 1 pour votre cas. Vous avez à donner à l'entrée comme (1,2000,28).

2021-11-22 08:00:37

Faire de l'entrée (1,2000,28) a fait une erreur ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)). J'ai donc modifié les formes (2000, 28, 1) pour x_train_df et (2000, 1, 1) pour y_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.
Badal

Dans d'autres langues

Cette page est dans d'autres langues

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