Как использовать MaxPooling1D с Conv1D - PullRequest
0 голосов
/ 09 декабря 2018

Я использую Conv1D вот так

X_train_t = X_train.reshape(X_train.shape[0], 1,12)
X_test_t = X_test.reshape(X_test.shape[0], 1,12)

print(X_train_t.shape)
print(X_train_t)

K.clear_session()
model = Sequential()
model.add(Conv1D(12,1, activation='relu', input_shape=(1,12)))

#model.add(MaxPooling1D(pool_size = (6))) 

model.add(LSTM(3))

model.add(Dense(1))

Я добавляю maxpooling для повышения производительности, как это, в строке model.add (Conv1D ..

model.add(MaxPooling1D(pool_size = (6))) 

, но она показывает ошибку вот так

ValueError: Negative dimension size caused by subtracting 6 from 1 for 'max_pooling1d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,12].

Это работает, если я установил pool_size = (1), но увеличит значение потерь. Если я хочу изменить pool_size на другое значение, а не 1. Как редактировать модель?

1 Ответ

0 голосов
/ 09 декабря 2018

MaxPooling1D для своих входов требуется трехмерный тензор с формой: (batch_size, steps, features).Исходя из вашего кода, X_train_t и X_test_t имеют 1 шаг (*.shape[0], 1, 12).Когда Пул перемещает свое окно на 6 шагов (pool_size=(6)), он не может.В результате выдается такое исключение.

Предложение : Попробуйте изменить свою форму ввода

Минимальный пример : Вот одно из возможных решенийс Conv1D:

    model = Sequential()
    model.add(Embedding(input_dim=1000, output_dim=128, input_shape=(12,))
    model.add(Convolution1D(filters=2, kernel_size=100, padding='same', activation=tf.nn.relu))
    model.add(MaxPooling1D(pool_size=6))
    model.add(GlobalAveragePooling1D())
    model.add(Dense(2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...