我试图在Keras中为NER任务(特别是来自this paper的模型中的解码器步骤)实现RNN解码器。为了实现它,我需要在时间步骤t将输出馈送到时间步骤t + 1的输入。如果我正确理解了Keras文档和Github的讨论,那么对于基础Keras来说这是不可能的(但如果我在这里错了,请纠正我)。我找到了Recurrentshop,它似乎具有我想要的功能,但我还没有能够让它运转起来。如果有人对一个好的方法有其他想法(例如建立一个自定义层),那当然是受欢迎的。
我怀疑我在让Recurrentshop工作时遇到了麻烦,因为我不清楚如何处理Keras中的输出序列。例如,如果我的模型的最后一层是LSTM
图层output_sequences=True
,而activation='softmax'
并且我符合categorical_crossentropy
作为我的损失函数,那么Keras是否知道要比较每个时间步输出与每个时间步骤的地面真实标签和总和损失?或者我是否需要在输出图层上使用TimeDistributed
?
作为一个具体的例子,让我们说编码器层的输出每个例子有100个时间步长,每个时间步有10个特征:
input_from_encoder_layers = Input(shape=(100, 10))
my_decoder_lstm_output = MyDecoderLSTM(50, activation='softmax')(input_from_encoder)
目标是为每个示例每个时间步骤提取一个标签。总结一下我在这里的困惑,我不知道在Keras中实现MyDecoderLSTM
的最佳方法是什么,而且我不清楚如何处理序列作为Keras模型中的最后一层。谢谢!