Ошибка значения: Вход 0 слоя conv1d несовместим со слоем: : ожидаемый min_ndim=3, найденный ndim=2. Полная форма получена: (Нет, 19)

#python #tensorflow

Вопрос:

  1. Я строю модель прогнозирования для данных последовательности, используя слой conv1d, предоставленный Keras. Вот как я это сделал`
 def autoencoder():  
    #autoencoder = Model(inputs=input_layer, outputs=decoder)
    input_dim = x_train_scaled.shape[1]
    input_layer = Input(shape=(input_dim,))
    conv1 = Conv1D(filters = 32, kernel_size=3,activation='relu') (input_layer)
    batch1 = BatchNormalization()(conv1)
    maxp1 = MaxPooling1D(pool_size=2)(batch1)
    dropout1 = Dropout(0.2)(maxp1)
    conv2 = Conv1D(filters = 16, kernel_size=3,activation='relu') (dropout1)
    batch2 = BatchNormalization()(conv2)
    maxp2 = MaxPooling1D(2)(batch2)
    dropout2 = Dropout(0.2)(maxp2)
    conv3 = Conv1D(filters = 8, kernel_size=3,activation='relu') (dropout2)
    batch3 = BatchNormalization()(conv3)
    maxp3 = MaxPooling1D(2)(batch3)
    dropout3 = Dropout(0.2)(maxp3)
    #decoder layers 
    conv4 = Conv1D(filters = 8, kernel_size=3,activation='relu') (dropout3)
    batch4 = BatchNormalization()(conv4)
    dropout4 = Dropout(0.2)(batch4)
    conv5 = Conv1D(filters = 16, kernel_size=3,activation='relu') (dropout4)
    batch5 = BatchNormalization()(conv5)
    unsamp5 = UpSampling1D(2)(batch5)
    dropout5 = Dropout(0.2)(unsamp5)
    conv6 = Conv1D(filters = 32, kernel_size=3,activation='relu') (dropout5)
    batch6 = BatchNormalization()(conv6)
    unsamp6 = UpSampling1D(2)(batch6)
    dropout6 = Dropout(0.2)(unsamp6)
    decoder = Conv1D(filters = 1, kernel_size=3,activation='sigmoid') (dropout6)
    return Model(input_layer, decoder)
 
  1. Модель поезда для уменьшения размера данных с помощью автоэнкодера

модель.компиляция(потеря=’категориальная кросцентропия’, оптимизатор=’адам», метрики=[‘точность’])

модель.подходит(масштаб x_train_, масштаб x_train_, эпохи=15, размер пакета=32, подробный=подробный, перемешивание=Верно)

  1. Однако отладочная информация имеет

Ошибка значения: Вход 0 слоя conv1d несовместим со слоем: : ожидаемый min_ndim=3, найденный ndim=2. Полная форма получена: (Нет, 19)

  1. Форма обучающих данных и валидационных данных выглядит следующим образом

масштабируемая фигура x_train_ (125973, 19)

  1. Набор данных используется для обучения модели NSL-KDD(https://www.unb.ca/cic/datasets/nsl.html)

Ответ №1:

Conv1D ожидает 3 D тензор с формой: batch_shape (steps, input_dim) . Добавьте дополнительное измерение к вашим вводимым данным.

Рабочий пример кода

 # 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)