Keras - ошибка бросков в CRF - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь добавить слой 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?

Спасибо :)

...