Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow-Keras断开图_Python_Tensorflow_Keras_Tensorflow2.0_Question Answering - Fatal编程技术网

Python Tensorflow-Keras断开图

Python Tensorflow-Keras断开图,python,tensorflow,keras,tensorflow2.0,question-answering,Python,Tensorflow,Keras,Tensorflow2.0,Question Answering,Tensorflow版本:2.x Python:3.7.4 断开图形:我试图复制下面的模型架构,但当我试图在Keras中绘制模型时,右侧部分似乎断开。我已经将隐藏矩阵HQ(用于提问)和HA(用于回答)作为输入传递到注意层(我们可以在下面的摘要中看到共同注意层的输入-输入形状是(512600)和(512600),并且共同注意输出形状对于矩阵CQ和CA也是相同的)。请帮我理解这一点。这需要纠正还是可以忽略 最终型号: 预期模型架构: 模型生成的图形:为什么右侧断开连接?请帮我理解。我并没有在问答

Tensorflow版本:2.x

Python:3.7.4

断开图形:我试图复制下面的模型架构,但当我试图在Keras中绘制模型时,右侧部分似乎断开。我已经将隐藏矩阵HQ(用于提问)和HA(用于回答)作为输入传递到注意层(我们可以在下面的摘要中看到共同注意层的输入-输入形状是(512600)和(512600),并且共同注意输出形状对于矩阵CQ和CA也是相同的)。请帮我理解这一点。这需要纠正还是可以忽略

最终型号:

预期模型架构:

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

问题更新为协同注意层代码,如下所示:

这里,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):(512600)


答案的上下文向量形状(CA):(512600)

因为您没有提供代码,我相信您忘了调用双向_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')
这是模型图片。


不要认为它应该断开连接,介意在模型定义上共享您的代码吗(特别是在协同注意层)?@emilyfy-我现在为相关的注意层添加了代码。你现在可以看一下吗。我的协同注意层生成/返回CA和CQ,因此我在一行中同时输入HA和HQ。但不知何故,在图形中,它只在左侧显示一个连接,而在右侧不显示。@Ronakrit的评论是对的,如果有多个变量,我通常将输入包装在一个列表中。您可以尝试将其定义为
def call(self,inputs):HQ,HA=inputs[0],inputs[1]
@emilyfy-它成功了。非常感谢。我现在添加了有关注意层的代码。你现在可以看一下吗。我的协同注意层生成/返回CA和CQ,因此我在一行中同时输入HA和HQ。但不知何故,在图形中,它只在左侧显示一个连接,而在右侧不显示。调用函数只需一个输入,您可以尝试将Hq和Ha连接在一起,并将
def-call(self,Hq,Ha):
更改为
def-call(self,inputs):
并修改您的代码
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')