Snažím se, aby CNN model pro binární klasifikaci non-image dataset. Můj model/ kód pracuje a produkuje velmi dobré výsledky (přesnost je vysoká), ale nejsem schopen pochopit input_shape
parametr pro 1. vrstvu Conv1D
.
Tvar X nebo vstupní (zde x_train_df
) je (2000, 28). Má 28 funkcí a 2000 vzorků. A tvar Y nebo štítky (zde y_train_df
) je (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)
Dal jsem input_shape
jako (28, 1) (převzato od referenční tuto otázku).
Ale v Conv1D vrstva dokumentaci je psáno, že,
Při použití této vrstvy jako první vrstva v modelu, poskytují input_shape argument (n-tice celých čísel, nebo Žádný, např. (10, 128) pro sekvence 10 vektorů 128-dimenzionální vektory.
Co jsem pochopil, ze to je rozměr input_shape by měla být (2000, 1) jak jsem již 2000 jedno-dimenzionální vektory. Ale dávat to jako input_shape
ukazuje chybu, jako,
ValueError: Vstup 0 z vrstvy "sequential_25" je neslučitelné s vrstva: předpokládaný tvar=(None, 2000, 1), nalezený tvar=(None, 28)
Takže moje otázka je, jaký by měl být správný input_shape
?
ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)).
Tak jsem změnil tvarů (2000, 28, 1) prox_train_df
a (2000, 1, 1) proy_train_df
jak je uvedeno v této a fungovalo to. Jsem z toho zmatená. To bude velmi užitečné, pokud byste mohl vysvětlit, jak upravit kód v otázce.