Tensorflow - Keras断开的图

3

Tensorflow版本:2.x

Python版本:3.7.4

断开的图表:我试图复制下面的模型架构,但当我尝试在Keras中绘制模型时,右侧部分似乎没有连接。我已经将隐藏矩阵HQ(针对问题)和HA(针对答案)作为输入传递给了注意力层(我们可以在下面的摘要中看到Coattention层的输入-输入形状为(512,600)和(512,600),矩阵CQ和CA的Coattention输出形状也相同)。请帮助我理解这种断开连接现象。这需要进行更正吗?还是可以忽略这个问题?

最终模型:

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

model.summary()

输入图像描述

预期的模型架构: 输入图像描述

模型生成的图表: 为什么右侧断开?请帮我理解。 我在问题和答案的双向层之后没有使用连接层,而是像上面所述将两个双向层的输出矩阵作为注意层的输入传递。

输入图像描述

以下是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)


不要认为它应该断开连接,能否分享一下您的代码模型定义(特别是关于共同注意力层)? - emilyfy
@emilyfy - 我现在已经添加了问题中的注意力层代码。你能否现在看一下它?我的共同注意力层会产生/返回CA和CQ,因此我在单个线路上拥有两个输入HA和HQ。但是在图表中,右侧只显示一个连接而左侧没有。 - Raghu
1
@Ronakrit的评论是正确的,如果有多个变量,我通常会将它们包装在一个列表中。您可以尝试将其定义为def call(self, inputs): HQ, HA = inputs[0], inputs[1] - emilyfy
@emilyfy - 它起作用了。谢谢你! - Raghu
1个回答

2

因为您没有提供代码,我认为您忘记使用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


我现在已经添加了问题中的注意力层代码。你能否现在看一下它?我的共同注意力层生成/返回CA和CQ,因此我在单个线路中拥有两个输入HA和HQ。但是在图表中,右侧只显示一个连接而左侧没有。 - Raghu
1
调用函数只需要一个输入,您可以尝试将Hq和Ha绑定在一起,并将def call(self, HQ, HA):更改为def call(self, inputs):并修改您的代码。 - Ronakrit W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接