我正在使用 keras 在 python 中开发一个 DNN 模型,它有一个 CRF 层作为输出。由于不推荐使用 Keras-contrib,我正在尝试以这种方式使用 Tensorflow Addons CRF 层(doc):
def get_model(n):
input = Input(shape=(None, 3000, n))
# CNN encoder
encoder = ...
classifier = TimeDistributed(encoder)(input)
# Add some CNN layers
classifier = ...
crf = CRF(5)
decoded_sequence, potentials, sequence_length, chain_kernel = crf(classifier)
model = Model(name='crf_model', inputs=input, outputs=potentials)
model.compile(optimizers.Adam(0.001), loss=crf_loss)
model.summary()
return model
因此,想法是在编译模型时添加一个CRF损失函数(
loss=crf_loss
)。
我尝试使用 Tensorflow Addons (doc) 中的 crf_log_likelihood,这看起来是个不错的选择,但它在我的代码中不起作用。我需要计算这种损失,以便通过使用适当的损失函数获得更好的准确性。
此外,我也尝试过使用 CRFModelWrapper (doc),它已经包含了损失函数,但它会导致输出形状出现一些问题,所以我只想在上面的代码中包含一个损失函数。