【发布时间】:2018-10-06 00:12:07
【问题描述】:
我正在尝试将 crf 层添加到我的功能模型中,但出现此错误,我无法解决:
ValueError: ('无法解释损失函数标识符:', )
CRF 层来自 keras contribs 包。
型号:
from keras_contrib.layers import CRF
inputs = Input(shape=(MAX_LENGTH,))
embedding = Embedding(VOCAB_SIZE +1, EMBEDDING_SIZE, mask_zero= True)(inputs)
left = LSTM(HIDDEN_SIZE, return_sequences=True)(embedding)
right = LSTM(HIDDEN_SIZE, go_backwards=True, return_sequences=True)(embedding)
left_right = concatenate([left, right])
left2 = LSTM(HIDDEN_SIZE, return_sequences=True)(embedding)
right2 = LSTM(HIDDEN_SIZE, go_backwards=True, return_sequences=True)(embedding)
left_right2 = concatenate([left2, right2])
left_right_combi = add([left_right, left_right2])
left_right_combii = TimeDistributed(Dense(NUM_LABELS, activation='softmax'))\
(left_right_combi)
crf = CRF(NUM_LABELS, sparse_target=True)(left_right_combii)
combined_model = Model(inputs=inputs, outputs=crf)
combined_model.compile(loss=CRF.loss_function, optimizer='adam', metrics=[CRF.accuracy])
如果我使用“正常”损失函数和指标,我会收到此错误:
combined_model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
"ValueError: An operation has
Nonefor gradient. 请确保 您的所有操作都定义了渐变(即 可微)。没有梯度的常见操作:K.argmax,K.round, K.eval。”
知道如何正确使用 crf 层吗?
谢谢你:)
【问题讨论】:
-
我们不能运行这个例子,类CRF是未定义的,你需要更好的解释问题给任何人提供答案。
-
@Matias Valdenegro 不幸的是,我无法提供数据,因此无论如何您都无法运行代码。如果 Class CRF 未定义,则必须从 Keras contribs 包中安装 CRF。
标签: python tensorflow neural-network keras crf