在Keras的点积层中,axes参数是用来做什么的?

4

当我们指定axes = (2, 2)时,确切被乘的值是什么?有人能告诉我这里背后到底发生了什么吗?

match = dot([input_encoded_m, question_encoded], axes=(2, 2))
match = Activation('softmax')(match)

数据形状:

print(input_encoded_m)
print(questions_encoded)

(<tf.Tensor 'dropout_41/Identity:0' shape=(None, 552, 64) dtype=float32>,
 <tf.Tensor 'dropout_42/Identity:0' shape=(None, 5, 64) dtype=float32>)

input_encoded_m长度为552,嵌入长度为64

questions_encoded长度为5,嵌入长度为64

如果我们在点积层中指定axes = (2,2),哪些值将被相乘?有谁能帮我解答一下吗?


1
https://keras.io/layers/merge/#dot_1 - The Guy with The Hat
@TheGuywithTheHat 我已经看过文档了,但是还是无法理解。除此之外,它正在对这两个张量进行点积。但这里的轴(2, 2)是什么意思?我的嵌入是否被乘起来了?就是这样吗? - user_12
1个回答

4

轴指的是张量的轴。

例如,在您的情况下,您有一个形状为(None,552,64)的3D(rank 3)张量。

标量(例如3)是0D张量。

向量([1,2,3])是1D张量:

矩阵([         是2D张量。以此类推。

       [1,2],
       [2,3],
        ]

第一轴(轴0)是唯一的一个没有行或列数的轴。

第二轴(轴1)是其中一个拥有522行的轴。

第三轴(轴2)是其中一个拥有64列的轴。

a = Input(batch_shape=(None,255,64))
b = Input(batch_shape=(None,5,64))
out = dot([a,b], axes =(2,2))
out.shape
TensorShape([Dimension(None), Dimension(255), Dimension(5)])

基本上,a.b = a1.b1 + a2.b2 +.... + a64.b64会得到一个标量。 由于您有5行,因此在张量的最后一轴中将具有5维向量。(向量维度不同于张量维度)


因此,点积是在嵌入上完成的,即64 * 64。在这种情况下,结果形状将是什么? - user_12
理论上应该是 (None, 255,5),我更新了我的回答。 - Eliethesaiyan

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