Input_shape de Conv1D strat Keras

0

Problema

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?

1

Cel mai bun răspuns

0

Să vedem cât de "Conv1D" ia de intrare.

>>> # 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 tensor cu forma: batch_shape + (pași, input_dim)

Cum am văzut mai sus, există 128 de caracteristici, 10 timesteps și mărimea lotului de 4. Deci, Conv1D are intrare ca (batch_size,timesteps,caracteristici). Este nevoie de 3D de intrare. Să presupunem că alegeți mărimea lotului 1 pentru cazul dumneavoastră. Trebuie să dau de intrare (1,2000,28).

2021-11-22 08:00:37

De a face intrare (1,2000,28) a făcut o eroare ca 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) pentru x_train_df și (2000, 1, 1) pentru y_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ă.
Badal

În alte limbi

Această pagină este în alte limbi

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