Я пишу модель Кераса для задачи логического вывода (предположения) относительно предпосылки и гипотезы.
Я запускаю предпосылку и гипотезу как через Bi-LSTM, с return_state = True,и затем использовать другой Bi-LSTM, инициализированный такими последними векторами состояния, чтобы зависимо кодировать как предпосылку, так и гипотезу.В коде, вот создание Bi-LSTM:
LastStateLSTM = LSTM(hidden_units, implementation=2, return_sequences=False, name='laststate', return_state=True )
LastStateLSTM = Bidirectional(LastStateLSTM, name='bilstm1')
EncoderLSTM = LSTM(hidden_units, implementation=2, return_sequences=True, name='encoderlstm')
EncoderLSTM = Bidirectional(EncoderLSTM, name='bilstm2')
И здесь я применяю такие слои:
out1, forward_prem_h, forward_prem_c, backward_prem_h,backward_prem_c = LastStateLSTM(prem)
out2, forward_hyp_h, forward_hyp_c, backward_hyp_h, backward_hyp_c = LastStateLSTM(hyp)
u = EncoderLSTM(prem, initial_state=[forward_hyp_h, forward_hyp_c, backward_hyp_h, backward_hyp_c])
v = EncoderLSTM(hyp, initial_state=[forward_prem_h, forward_prem_c, backward_prem_h, backward_prem_c])
В итоге, есть сводка () и подгонка () методы:
final_model.compile(optimizer=Adam(amsgrad=True), loss='categorical_crossentropy', metrics=['accuracy'])
final_model.summary()
final_model.fit([X1_nli, X2_nli, overlapFeatures_nli, refutingFeatures_nli, polarityFeatures_nli, handFeatures_nli, cosFeatures_nli, bleu_nli, rouge_nli, cider_nli_train], \
Y_nli, validation_data=([X1_test_nli, X2_test_nli, overlapFeatures_nli_test, refutingFeatures_nli_test, polarityFeatures_nli_test, handFeatures_nli_test, cosFeatures_nli_test, bleu_nli_test, rouge_nli_test, cider_snli_test], Y_test_nli), \
callbacks=[checkpoint], epochs=1, batch_size=8)
Однако я обнаружил, что при передаче аргумента initial_state
в EncoderLSTM
обучение не начинается (и без ошибок), даже если выводится краткое изложение модели..
Я использую Keras 2.2.2 с бэкэндом Theano.У кого-нибудь была подобная проблема?
Заранее спасибо.