Ers*_*sin 5 python pooling masking lstm keras
...
print('Build model...')
model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(size, return_sequences=True, dropout_W=0.2 dropout_U=0.2))
model.add(GlobalAveragePooling1D())
model.add(Dense(1))
model.add(Activation('sigmoid'))
....
Run Code Online (Sandbox Code Playgroud)
我需要能够在LSTM层之后的样本中获取所有时间步长的向量的平均值或最大值,然后再将该平均值或最大值提供给Keras中的密集层。
我认为timedistributedmerge能够做到这一点,但已被弃用。使用return_sequences=TrueI可以获取LSTM层之后的样本中所有时间步骤的向量。但是,GlobalAveragePooling1D()它与屏蔽不兼容,它考虑了所有时间步长,而我只需要非屏蔽时间步长。
我看到了推荐该Lambda图层的帖子,但这些帖子也没有考虑遮罩。任何帮助,将不胜感激。
由于平均池仅在一个轴上求平均值,因此您只需要纠正平均值中的元素数量,因为损失掩蔽是在最后处理的,而不是在这里。你可以用这样的东西来做到这一点:
class GlobalAveragePooling1DMasked(GlobalAveragePooling1D):
def call(self, x, mask=None):
if mask != None:
return K.sum(x, axis=1) / K.sum(mask, axis=1)
else:
return super().call(x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4367 次 |
| 最近记录: |