Tensorflow - отключенный граф Кераса - PullRequest
2 голосов
/ 10 марта 2020

Версия Tensorflow: 2.x

Python: 3.7.4

Отключенный график: Я пытаюсь повторить приведенную ниже модель архитектуры, но правая часть кажется, отключился, когда я попытался построить модель в Керасе. Я уже передал скрытые матрицы HQ (для вопроса) и HA (для ответа) в качестве входных данных для слоя внимания (ниже мы можем увидеть входные данные для слоя Coattention - формы ввода (512,600) и (512, 600) и Coattention выходные формы также одинаковы для матриц CQ и CA). Пожалуйста, помогите мне понять это разъединение. Нужно ли это исправлять или это можно игнорировать?

Конечная модель:

inputs = [input_text1, input_text2]
outputs = score_oq_oa
model = Model(inputs=inputs, outputs=outputs)

model.summary()

enter image description here

Ожидаемая модель Архитектура: enter image description here

График, сгенерированный моделью: Почему он отключен с правой стороны? Пожалуйста, помогите мне понять. Я не использовал слой сцепления после двунаправленных слоев вопросов и ответов, но я просто передал выходные матрицы обоих двунаправленных слоев в качестве входных данных для слоя внимания, как указано выше. enter image description here

Вопрос обновлен с помощью кода для слоя Coattention, как показано ниже:

Здесь HQ и HA - это скрытые матрицы состояний / выходы двух отдельных двунаправленных слоев, как мы видим в модельная архитектура.

class coattention(tf.keras.layers.Layer):

    def __init__(self):
        super(coattention, self).__init__()

    def call(self, HQ, HA):  

        L = tf.linalg.matmul(HA, HQ, transpose_a = True, transpose_b = False)
        AQ = tf.nn.softmax(L, axis = 1)
        AA = tf.nn.softmax(tf.transpose(L), axis = 1)

        CQ = tf.linalg.matmul(HA, AQ, transpose_a = False, transpose_b = False)
        CA = tf.linalg.matmul(HQ, AA, transpose_a = False, transpose_b = False)

        return CQ, CA


coattention_layer = coattention()
CQ, CA = coattention_layer(HQ, HA)
print ("Shape of Context vector of Question (CQ): ", CQ.shape)
print ("Shape of Context vector of Answer   (CA): ", CA.shape)

Вектор формы контекста вопроса (CQ): (512, 600)

Вектор формы контекста ответа (CA): (512, 600)

1 Ответ

1 голос
/ 11 марта 2020

Поскольку вы не предоставили код, я полагаю, вы забыли вызвать слой покрытия с входным слоем Bidirectional_7.

Вот пример кода

Ha = Input(shape=(1,2,3), name='Ha')
Hq = Input(shape=(1,2,3), name='Hq')

your_coattention_layer = Dense(12, name='your_coattention_layer')

# this part that I think you forgot
Ca = your_coattention_layer(Ha)
cQ = your_coattention_layer(Hq)


out1 = Dense(123, name='your_Ca_layer')(Ca)
out2 = Dense(123, name='your_Cq_later')(cQ)
M = Model(inputs=[Ha,Hq], outputs=[out1,out2])
M.summary()

from keras.utils import plot_model
plot_model(M, to_file='Example.png')

Это изображение модели.

enter image description here

...