Input_shape di Conv1D strato Keras

0

Domanda

Sto cercando di fare un CNN modello per la classificazione binaria di un non-immagine del set di dati. Il mio modello/ codice è lavorare e di produrre risultati molto buoni (precisioni sono alti), ma non riesco a capire il input_shape parametro per il 1 ° strato di Conv1D.

Forma di X o di input (qui x_train_df) (2000, 28). Ha 28 caratteristiche e 2000 campioni. E la forma di Y o etichette (qui y_train_df) (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)

Ho dato input_shape come (28, 1) (preso riferimento da questa domanda).

Ma in Conv1D strato documentazione è scritto:

Quando si utilizza questo livello come il primo strato in un modello, di fornire un input_shape argomento (tupla di valori interi o Nessuno, ad esempio, (10, 128), sequenze di 10 vettori di 128-dimensionale vettori.

Quello che ho capito, è la dimensione di input_shape dovrebbe essere (2000, 1) come ho 2000 unidimensionale vettori. Ma questo come input_shape mostra un errore,

ValueError: Ingresso 0 di livello "sequential_25" è incompatibile con il livello: forma=(None, 2000, 1), trovare la forma=(None, 28)

Quindi la mia domanda è quale dovrebbe essere la corretta input_shape?

1

Migliore risposta

0

Verificare come "Conv1D" porta di ingresso.

>>> # 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 tensore di forma: batch_shape + (passi, input_dim)

Come si è visto sopra, ci sono 128 funzioni, 10 timesteps e della dimensione del lotto di 4. Così, Conv1D prende in input (batch_size,timesteps,caratteristiche). Ci vuole ingresso 3D. Diciamo che scegliere la dimensione lotto 1 per il vostro caso. Devi dare un input come (1,2000,28).

2021-11-22 08:00:37

Facendo l'input (1,2000,28) ha fatto un errore come ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)). Così ho cambiato le forme (2000, 28, 1) per x_train_df e (2000, 1, 1) per y_train_df come mostrato in questo e che ha funzionato. Sono confuso su questo. Sarà molto utile se si potrebbe spiegare come modificare il codice in questione.
Badal

In altre lingue

Questa pagina è in altre lingue

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