猿问

如何将 MaxPooling1D 与 Conv1D 结合使用

我像这样使用 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))

我在 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. 如何编辑模型?


慕虎7371278
浏览 680回答 2
2回答

墨色风雨

MaxPooling1D需要一个三维张量为它的输入与形状:(batch_size, steps, features)。根据您的代码,X_train_t并X_test_t有 1 个步骤 ( *.shape[0], 1, 12)。当 Pooling 将其窗口移动 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))

噜噜哒

我添加了一个 Dense 层和 Reshape 层来解决这个问题。model = Sequential()model.add(Conv1D(12,1, activation='relu', input_shape=(1,12)))model.add(Dense(32*3))model.add(Reshape((3,32)))model.add(MaxPooling1D(pool_size = (3))) model.add(LSTM(32))model.add(Dense(1))
随时随地看视频慕课网APP

相关分类

Python
我要回答