【问题标题】:Pooling Layer doesn't support after zero_mask = True in embedding layer (Keras)在嵌入层(Keras)中 zero_mask = True 之后,池化层不支持
【发布时间】:2020-04-05 22:54:42
【问题描述】:
model = Sequential()
model.add(Embedding(input_dim=wordEmbeddings.shape[0], output_dim=wordEmbeddings.shape[1], input_length=n_in, weights=[wordEmbeddings], trainable=False, **zero_mask=True**))       
model.add(Dropout(0.3))
model.add(Bidirectional(LSTM(200, return_sequences=True, recurrent_dropout=0.5, dropout=0.5, name='bilstm1')))
model.add(TimeDistributed(Dense(100, activation="relu")))
model.summary()
model.add(MaxPooling1D(pool_size=7, strides=1))
crf = CRF(n_out)
model.add(crf)
model.compile(optimizer="rmsprop", loss=crf_loss, metrics=[crf_viterbi_accuracy])

模型摘要

此模型运行良好。但是我得到了损失函数的负值。

所以我更改了嵌入层中的属性 zero_mask=True 并尝试训练模型。但后来我收到如下错误。

“屏蔽不支持 MaxPooling1D。”

对此的任何帮助都非常感谢。

【问题讨论】:

  • 你试过GlobalMaxPooling1D吗?由于您并没有真正使用 7 号长度的 7 号池......

标签: keras recurrent-neural-network masking named-entity-recognition crf


【解决方案1】:

池化层的替代方案:

  • GlobalMaxPooling1D() + Reshape((1, 100))
  • Lambda(lambda x: K.max(x, axis=1, keepdims=True))

如果您的损失很奇怪,仔细检查您的数据范围可能是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多