Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Tensorflow 良';s Concat校准分数问题_Tensorflow_Tensorflow.js - Fatal编程技术网

Tensorflow 良';s Concat校准分数问题

Tensorflow 良';s Concat校准分数问题,tensorflow,tensorflow.js,Tensorflow,Tensorflow.js,我一直在试图理解注意力机制是如何工作的。目前正在查看示例。我发现在示例中使用了点产品对齐分数(from) 所以这个表达式表示为 let attention=tf.layers.dot({axes:[2,2]}).apply([decoder,encoder]); 在公园里。 解码器(hut)的形状为[10,64],编码器(hus)的形状为[12,64],因此结果的形状为[10,12]。到目前为止还不错 现在,我正在尝试实现concat对齐分数,如下所示 因此,首先要做的是将hut和hus连接

我一直在试图理解注意力机制是如何工作的。目前正在查看示例。我发现在示例中使用了
点产品对齐分数
(from)

所以这个表达式表示为

let attention=tf.layers.dot({axes:[2,2]}).apply([decoder,encoder]);
在公园里。 解码器(
hut
)的形状为[10,64],编码器(
hus
)的形状为[12,64],因此结果的形状为[10,12]。到目前为止还不错

现在,我正在尝试实现
concat对齐分数
,如下所示

因此,首先要做的是将
hut
hus
连接起来。然而,它们有不同的形状,所以我不知道如何继续。我应该以某种方式重塑张量吗?如果是的话,它的形状是什么

我一直在谷歌上搜索,想知道其他人是如何做到这一点的

#对于concat评分,首先连接解码器隐藏状态和编码器输出
out=torch.tanh(self.fc(解码器隐藏+编码器输出))
但这似乎不正确,因为它们对值求和,而不是串联

任何指导都将不胜感激

更新以下是模型摘要:

__________________________________________________________________________________________________
Layer (type)                    Output shape         Param #     Receives inputs
==================================================================================================
input1 (InputLayer)             [null,12]            0
__________________________________________________________________________________________________
embedding_Embedding1 (Embedding [null,12,64]         2240        input1[0][0]
__________________________________________________________________________________________________
input2 (InputLayer)             [null,10]            0
__________________________________________________________________________________________________
lstm_LSTM1 (LSTM)               [null,12,64]         33024       embedding_Embedding1[0][0]
__________________________________________________________________________________________________
embedding_Embedding2 (Embedding [null,10,64]         832         input2[0][0]
__________________________________________________________________________________________________
encoderLast (GetLastTimestepLay [null,64]            0           lstm_LSTM1[0][0]
__________________________________________________________________________________________________
lstm_LSTM2 (LSTM)               [null,10,64]         33024       embedding_Embedding2[0][0]
                                                                 encoderLast[0][0]
                                                                 encoderLast[0][0]
__________________________________________________________________________________________________
dot_Dot1 (Dot)                  [null,10,12]         0           lstm_LSTM2[0][0]
                                                                 lstm_LSTM1[0][0]
__________________________________________________________________________________________________
attention (Activation)          [null,10,12]         0           dot_Dot1[0][0]
__________________________________________________________________________________________________
context (Dot)                   [null,10,64]         0           attention[0][0]
                                                                 lstm_LSTM1[0][0]
__________________________________________________________________________________________________
concatenate_Concatenate1 (Conca [null,10,128]        0           context[0][0]
                                                                 lstm_LSTM2[0][0]
__________________________________________________________________________________________________
time_distributed_TimeDistribute [null,10,64]         8256        concatenate_Concatenate1[0][0]
__________________________________________________________________________________________________
time_distributed_TimeDistribute [null,10,13]         845         time_distributed_TimeDistributed1
==================================================================================================
Total params: 78221
Trainable params: 78221
Non-trainable params: 0
__________________________________________________________________________________________________

首先,要使
tf.layers.dot工作,两个输入应该具有相同的形状

要执行串联,可以使用tf.concat
([hut,hus])
。新形状将取决于在其上执行连接的轴

假设
h\u t
h\u s
都具有
[a,b]
形状,如果在轴0上进行连接,则新形状将是
[2a,b]
,如果在轴1上进行连接,则生成的形状将是
[a,2b]

然后,您可以将
tf.tanh
应用于输入,或者创建一个自定义层来为您执行此操作

更新:


由于tf.layers.dot是在第二个轴(轴=1)上不匹配的3d数据上执行的,因此只能在该轴上进行连接,结果形状将是
[1,10+12,64]

>首先,对于tf.layers.dot来说,两个输入都应该具有相同的形状。在这种情况下,我变得更加困惑。(我已经更新了原始问题并添加了模型摘要。)查看模型,它说
dot_Dot1(dot)
接收作为输入的
lstm_LSTM1
lstm_LSTM2
,其形状为[null,12,64]和[null,10,64]。你能解释一下这里发生了什么吗?在这种情况下它是有效的,因为它是在3d张量上执行的,而之前没有指出批量大小。可以在第二个轴(轴=1)上进行混凝土浇筑。生成的形状将是[1,22,64]您是对的,我没有指定batchsize。对不起。然而,我仍然对concat感到困惑。我的意思是,
dot score
对我来说很有意义,因为我正在沿着编码器和解码器的LSTM功能执行点积。这意味着我将它们的特征“混合”成一个([batch_size,10,12])张量。但是,在
concat score
中,如果我将它们堆叠成一个[batch_size,22,64],那么这些特性之间就没有“混合”。所以我觉得这不对。。。但我仍然在学习,所以我可能遗漏了一些东西,我说不出背后的数学原因。也许你需要阅读使用concat对齐的论文,我已经读了10遍了。但是这篇论文没有解释这些老年退休金计划背后的原因。作者说他们已经测试了3种不同的分数函数,就这样。无论如何,非常感谢你抽出时间。