Eu sunt încercarea de a face un CNN model de clasificare binară a unui non-imagine set de date. Modelul meu/ cod este de lucru și producătoare de rezultate foarte bune (preciziile sunt mari), dar eu sunt în imposibilitatea de a înțelege input_shape
parametru pentru stratul 1 de Conv1D
.
Forma de X sau de intrare (de aici x_train_df
) este (2000, 28). Acesta are 28 de caracteristici și 2000 de probe. Și forma de Y sau etichete (aici y_train_df
) este (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)
Am dat input_shape
ca (28, 1) (luate de referință la această întrebare).
Dar în Conv1D strat documentația este scris că,
Atunci când se utilizează acest strat ca primul strat într-un model, oferă o input_shape argument (tuplu de numere întregi sau Nici unul, de exemplu, (10, 128) pentru secvențe de 10 vectori de 128-dimensional vectori.
Ce am inteles din aceasta este dimensiunea de input_shape ar trebui să fie (2000, 1), ca am 2000 unidimensional vectori. Dar oferindu-asta ca input_shape
prezinta o eroare cum ca,
ValueError: Intrare 0 de strat "sequential_25" este incompatibilă cu strat: forma de așteptat=(Niciunul, 2000, 1), a găsit forma=(Niciunul, 28)
Deci, întrebarea mea este ce ar trebui să fie corecte input_shape
?
ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)).
Așa că am schimbat forme de a fi (2000, 28, 1) pentrux_train_df
și (2000, 1, 1) pentruy_train_df
așa cum se arată în acest lucru și care a lucrat. Sunt confuz despre aceasta. Acesta va fi foarte util dacă ați putea explica cum să modificați codul în cauză.