【问题标题】:Why does my keras-contrib's crf.accuracy increase so fast?为什么我的 keras-contrib 的 crf.accuracy 提升如此之快?
【发布时间】:2019-03-28 11:48:29
【问题描述】:

我使用 BiLSTM+CRF 为 postagging 做一个序列标记模型。但我发现我的 crf.accuracy 增长如此之快,仅在第一个 epoch 就达到了 1.0。 我使用 keras_contrib lib 中的 CRF 层,并参考 CRF 示例编写代码。我的后端是 TensorFlow。 output = TimeDistributed(Dense(100,activation='relu'),name='Dense_1')(lstm_output) output = Dropout(rate=0.3)(output) if self.use_crf: crf_layer = CRF(self.label_num,sparse_target=True) output = crf_layer(output) model = Model(inputs, output) model.compile('adam', loss=crf_layer.loss_function, metrics=[crf_layer.accuracy]) else: output = TimeDistributed(Dense(self.label_num,activation='softmax'), name='Dense_2')(output) model = Model(inputs, output) model.compile('adam', loss='categorical_crossentropy', metrics=['accuracy'])

但是 crf_layer.accuracy 似乎增长得如此之快。在第一个时期,它显示为

1888/2000 [============================>..] - ETA:4s - 损失:17.2046 - acc:0.9666 1920/2000 [===========================>..] - ETA:3s - 损失:17.1906 - acc:0.9671 1952/2000 [=============================>.] - ETA:2s - 损失:17.2806 -acc:0.9677 1984/2000 [============================>.] - ETA:0s - 损失:17.2222 - acc:0.9682

但是如果我不使用CRF,准确率只有0.4,就像else部分的代码一样,训练看起来更正常。

那么我是否忽略了 keras_contrib 的 CRF 中的一些细节

【问题讨论】:

    标签: keras crf


    【解决方案1】:

    我找到了错误。因为我的目标是一个单热向量,所以我不能设置 sparse_target=True。解决这个问题后,现在看起来正常了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 2018-10-01
      • 2020-10-01
      相关资源
      最近更新 更多