Input_shape кераса warstwy Conv1D

0

Pytanie

Staram się stworzyć model CNN dla binarnej klasyfikacji zbioru danych bez zdjęć. Mój model/ kod działa i daje bardzo dobre wyniki (wysoka dokładność), ale nie mogę zrozumieć input_shape parametr dla 1 warstwy Conv1D.

Forma X lub enter (tutaj x_train_df) jest (2000, 28). On ma 28 funkcji i 2000 próbek. I kształt Y lub napis (tutaj y_train_df) jest (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)

Dałem input_shape jak (28, 1) (link zaczerpnięty z tego wydania).

Ale w dokumentacji poziom Conv1D jest napisane, że

Przy użyciu tej warstwy jako pierwszej warstwy w modelu wprowadź argument input_shape (orszak liczb całkowitych lub ich nie ma, na przykład (10, 128) dla sekwencje z 10 wektorów 128-wymiarowych wektorów.

Z tego zrozumiałem, że wymiar input_shape musi być (2000, 1), tak jak u mnie 2000 jednowymiarowe wektorów. Ale daje to jak input_shape pokazuje błąd w postaci,

Błąd wartości: Enter 0 warstwy "sequential_25" skojarzony z warstwy: oczekiwana forma=(Nie, 2000, 1), znajdująca forma=(Nie, 28)

Dlatego moje pytanie w tym, że musi być poprawny input_shape?

1

Najlepsza odpowiedź

0

Sprawdźmy, jak "Conv1D" przyjmuje dane wejściowe.

>>> # 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 niezmiennymi tensora z formą: batch_shape + (kroki, input_dim)

Jak widać powyżej, istnieje 128 funkcji, 10 kroków czasowych i rozmiar pakietu 4. W ten sposób, Conv1D przyjmuje dane wejściowe jak (rozmiar pakietu,tymczasowe kroki,funkcje). Do tego potrzebne jest 3D-enter. Załóżmy, że wybrałeś rozmiar pakietu jak 1 do swojego przypadku. Należy wpisać dane typu (1 2000,28).

2021-11-22 08:00:37

Podczas pisania jako (1,2000,28) wystąpił błąd w postaci ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)). Dlatego zmieniłem formy (2000, 28, 1) dla x_train_df i (2000, 1, 1) dla y_train_df jak pokazano w tym i w tym, że zadziałało. Jestem w szoku z tego powodu. Byłoby bardzo pomocne, jeśli można wyjaśnić, jak zmienić kod w pytaniu.
Badal

W innych językach

Ta strona jest w innych językach

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