为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 MaxPooling1D 与 Conv1D 结合使用

如何将 MaxPooling1D 与 Conv1D 结合使用

慕虎7371278 2021-09-11 19:14:14
我像这样使用 Conv1DX_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. 如何编辑模型?
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-09-11
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我添加了一个 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))


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 678 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信