Я пытаюсь добавить слой 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: Операция имеет None
для градиента. Пожалуйста, убедитесь, что у всех ваших операций есть определенный градиент (то есть дифференцируемый). Общие операции без градиента:K.argmax, K.round, K.eval. "
Есть идеи, как правильно использовать слой crf?
Спасибо :)