Input_shape кераса слоя Conv1D

0

Вопрос

Я пытаюсь создать модель CNN для двоичной классификации набора данных без изображений. Моя модель/ код работает и дает очень хорошие результаты (точность высока), но я не могу понять input_shape параметр для 1-го слоя Conv1D.

Форма X или ввода (здесь x_train_df) является (2000, 28). Он имеет 28 функций и 2000 образцов. И форма Y или надписи (здесь 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)

Я дал input_shape как (28, 1) (взята ссылка из этого вопроса).

Но в документации уровня Conv1D написано, что,

При использовании этого слоя в качестве первого слоя в модели укажите аргумент input_shape (кортеж целых чисел или их нет, например (10, 128) для последовательностей из 10 векторов 128-мерных векторов.

Из этого я понял, что размерность input_shape должна быть (2000, 1), так как у меня 2000 одномерных векторов. Но давая это как input_shape показывает ошибку в виде,

Ошибка значения: Ввод 0 слоя "sequential_25" несовместим со слоем: ожидаемая форма=(Нет, 2000, 1), найденная форма=(Нет, 28)

Поэтому мой вопрос в том, что должно быть правильным input_shape?

1

Лучший ответ

0

Давайте проверим, как "Conv1D" принимает входные данные.

>>> # 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 тензор с формой: batch_shape + (шаги, input_dim)

Как видно выше, существует 128 функций, 10 временных шагов и размер пакета 4. Таким образом, Conv1D принимает входные данные как (размер пакета,временные шаги,функции). Для этого требуется 3D-ввод. Допустим, вы выбрали размер пакета как 1 для своего случая. Вы должны ввести данные типа (1 2000,28).

2021-11-22 08:00:37

При вводе в качестве (1,2000,28) произошла ошибка в виде ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)). Поэтому я изменил формы на (2000, 28, 1) для x_train_df и (2000, 1, 1) для y_train_df как показано в этом и в том, что сработало. Я в замешательстве по этому поводу. Было бы очень полезно, если бы вы могли объяснить, как изменить код в вопросе.
Badal

На других языках

Эта страница на других языках

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