【问题标题】:How to use MaxPooling1D with Conv1D如何将 MaxPooling1D 与 Conv1D 一起使用
【发布时间】:2021-04-29 21:22:06
【问题描述】:

我是这样使用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..

下添加了 maxpooling 来提高性能
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。如何编辑模型?

【问题讨论】:

    标签: python keras conv-neural-network


    【解决方案1】:

    MaxPooling1D 的输入需要一个 3d 张量,其形状为:(batch_size, steps, features)。根据您的代码,X_train_tX_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))
    

    【讨论】:

      【解决方案2】:

      我添加了一个 Dense layer 和 Reshape Layer 来解决这个问题。

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

      【讨论】:

        猜你喜欢
        • 2019-05-25
        • 2018-09-20
        • 1970-01-01
        • 2017-12-12
        • 2021-01-02
        • 1970-01-01
        • 2023-03-13
        • 2014-09-25
        • 2016-01-30
        相关资源
        最近更新 更多