#python #tensorflow
Вопрос:
- Я строю модель прогнозирования для данных последовательности, используя слой 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)
- Модель поезда для уменьшения размера данных с помощью автоэнкодера
модель.компиляция(потеря=’категориальная кросцентропия’, оптимизатор=’адам», метрики=[‘точность’])
модель.подходит(масштаб x_train_, масштаб x_train_, эпохи=15, размер пакета=32, подробный=подробный, перемешивание=Верно)
- Однако отладочная информация имеет
Ошибка значения: Вход 0 слоя conv1d несовместим со слоем: : ожидаемый min_ndim=3, найденный ndim=2. Полная форма получена: (Нет, 19)
- Форма обучающих данных и валидационных данных выглядит следующим образом
масштабируемая фигура x_train_ (125973, 19)
- Набор данных используется для обучения модели 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)