Ошибка отключения графика в модели иерархического внимания в Керасе - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над моделью логического вывода, используя модель иерархического внимания в Керасе. Каждая предпосылка - это трехмерный тензор, состоящий из нескольких предложений со словами [BATCH_SIZE, MAX_SENTS, MAX_WORDS], в то время как гипотеза - это двумерный тензор с каждым предложением, состоящим из слов [BATCHSIZE, MAX_WORDS]. Помещение кодируется иерархически на двух уровнях ГРУ, а гипотеза - в одном ГРУ. Следует рассчитать внимание к гипотезе по каждому исходному предложению, которое затем объединяется с закодированной гипотезой и предпосылкой. Я получаю ошибку отключенного графика, когда пытаюсь дать вход этой модели. Ниже приведен код модели:

MAX_SENT_LENGTH=20, MAX_SENTS=50, EMBED_DIM=300
sentence_premise = Input(shape=(MAX_SENT_LENGTH,), dtype='int32')
embedded_sequences = embedding_layer(sentence_premise)
print (embedded_sequences.shape) #(?, 20, 300)
lstm_1 = Bidirectional(GRU(50,return_sequences=False))(embedded_sequences)
print (lstm_1.shape) #(?,100)
sentEncoder = Model(inputs=sentence_premise, outputs=lstm_1)

premise_input = Input(shape=(MAX_SENTS,MAX_SENT_LENGTH), dtype='int32')
premise_encoder = TimeDistributed(sentEncoder)(premise_input)
print (premise_encoder.shape) #(?, 50, 100)
lstm_3 = Bidirectional(GRU(50,return_sequences=False))(premise_encoder)
print (lstm_3.shape) #(?,100)

sentence_hyp = Input (shape=(MAX_SENT_LENGTH,),dtype = 'int32')
embedded_hyp = embedding_layer(sentence_hyp)
print (embedded_hyp.shape) # (?, 20, 300)
lstm_2= Bidirectional (GRU(num_neurons,return_sequences=False))(embedded_hyp)
print (lstm_2.shape) #(?,100)
Attn_vec=Attention(lstm_1,lstm_2)
print (lstm_2.shape,Attn_vec.shape,lstm_3.shape) #(?, 100) (?, 100) (?, 100)
joint = Concatenate (axis=-1)([lstm_2,Attn_vec,lstm_3])  #(?, 300)
preds = Dense(2, activation='softmax')(joint)   #(?,2)
model = Model(inputs=[premise_input,sentence_hyp],outputs=preds) #Error here

ValueError: График отключен: невозможно получить значение для тензорного тензора («input_1: 0», shape = (?, 20), dtype = int32)

Странно то, что если я уберу вектор внимания (Attn_ve c в коде), вся модель будет успешно скомпилирована и даст мне результаты. Может кто-нибудь объяснить, почему модель не может принять входные данные и что мне здесь не хватает. Любая помощь будет принята с благодарностью. Заранее спасибо!

...