在 keras 中使用带有 LSTM 的 CNN 时是否必须使用池层?
Does pooling layer mandatory when using CNN with LSTM in keras?
我正在使用 CNN+LSTM 解决一些二元分类问题。我的代码如下。
def create_network():
model = Sequential()
model.add(Conv1D(200, kernel_size=2, activation = 'relu', input_shape=(35,6)))
model.add(Conv1D(200, kernel_size=2, activation = 'relu'))
model.add(MaxPooling1D(3))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200))
model.add(Dense(100))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
当我使用上面的模型时,我得到了一些不好的结果。但是,当我删除层 model.add(MaxPooling1D(3))
时,结果有所改善。
我的问题如下
- 当 cnn 与 lstm 一起使用时是否必须有池化层(因为我也在使用 dropout 层)?
- 如果它是强制性的,您会建议使用哪些其他类型的池化层。
如果需要,我很乐意提供更多详细信息。
首先,您不必使用 MaxPooling1D 层。此处的 MaxPooling 只会减少传递给 LSTM 的输入量(在本例中)。
从纯技术的角度来看,LSTMs 可以处理任何序列长度,而 keras 会自动设置合适数量的输入特征
虽然这里发生了一些有趣的事情,您可能想看一看:
很难说某种池化机制会比另一种更好。然而,直觉是最大池化在从极端情况下进行推理时效果更好,而平均池化在忽略极端情况时效果更好。
你留下了隐含的步幅,应该注意池化层和卷积层的默认步幅值是不同的(None vs 1)。这意味着比较有和没有最大池化的网络并不是完全相同的比较,因为你大大减少了 LSTM 层将获得的数据量。
我正在使用 CNN+LSTM 解决一些二元分类问题。我的代码如下。
def create_network():
model = Sequential()
model.add(Conv1D(200, kernel_size=2, activation = 'relu', input_shape=(35,6)))
model.add(Conv1D(200, kernel_size=2, activation = 'relu'))
model.add(MaxPooling1D(3))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200))
model.add(Dense(100))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
当我使用上面的模型时,我得到了一些不好的结果。但是,当我删除层 model.add(MaxPooling1D(3))
时,结果有所改善。
我的问题如下
- 当 cnn 与 lstm 一起使用时是否必须有池化层(因为我也在使用 dropout 层)?
- 如果它是强制性的,您会建议使用哪些其他类型的池化层。
如果需要,我很乐意提供更多详细信息。
首先,您不必使用 MaxPooling1D 层。此处的 MaxPooling 只会减少传递给 LSTM 的输入量(在本例中)。 从纯技术的角度来看,LSTMs 可以处理任何序列长度,而 keras 会自动设置合适数量的输入特征
虽然这里发生了一些有趣的事情,您可能想看一看:
很难说某种池化机制会比另一种更好。然而,直觉是最大池化在从极端情况下进行推理时效果更好,而平均池化在忽略极端情况时效果更好。
你留下了隐含的步幅,应该注意池化层和卷积层的默认步幅值是不同的(None vs 1)。这意味着比较有和没有最大池化的网络并不是完全相同的比较,因为你大大减少了 LSTM 层将获得的数据量。