使用代码中的crf层训练模型时出现:tensorflow.python.framework.errors_impl.InvalidArgumentError: slice index 1 of dimension 0 out of bounds. [[{{node loss/output_1_loss/strided_slice_6}}]] [Op:__inference_keras_scratch_graph_8174]

训练lstm+crf模型时出现以上错误:

  1. 直接使用不会报错
    for i in range(per_epochs):
    for x,y in dataset.take(1):
    with tf.GradientTape() as tape:
    print(i)
    pre = model(x)
    mask = tf.greater(x,0)
    l = loss(y,pre,mask)
    print(l)
    但crf层前的梯度为None
  2. 使用以下会报错
    model.fit(dataset,epochs,steps_per_step)

你可以参考HanLP的写法,将NgramConvTagger.fit的loss参数改成crf就可以了。不过根据经验,crf只能带来~0.3的提升,但速度下降十倍。

谢谢 好的我先修改一下