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
?
ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)).
Così ho cambiato le forme (2000, 28, 1) perx_train_df
e (2000, 1, 1) pery_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.