2017-05-08 244 views
1

我希望能够在凯拉斯计算一个向量明智的点积。 详细地说,我的意思是如果我有两个张量AB,都与形状(None, 30, 100),我要计算与形状(None, 30, 1)的结果C,其将满足如何计算Keras中的矢量智慧点积?

C[:,:,i] = dot(A[:,:,i], B[:,:,i]). 

我不知道这是否是可能的,因为batch_dot()在后端功能将只返回形状(None, 30, 30),只有有关系

C[:,i,j] = dot(A[:,:,i], B[:,:,j]) 

但是,这不是我想要的。

谢谢!

+1

您的输出是否真的(无,30,1)?还是(无,30,100)? –

+0

它应该是(无,30,1),因为两个100维矢量的点积是一个标量。我可能没有足够清楚地描述这个问题。按照元素来说,我已经将这些100维向量看作一个元素。 – zhuzilin

回答

2

你可以尝试这样的:

import keras.backend as K 

C = K.sum(A * B,axis=-1,keepdims=True) 
+0

谢谢你的回答。凯拉斯的张量是否支持'*'操作? – zhuzilin

+0

是的,这是一个元素乘法。结果与原件形状相同。然后你总结最后一个轴。 –

+0

谢谢!我知道了。 – zhuzilin

0

batch_dot功能是适合你的,只是包括正确的轴。假设A.shape = (2,3,4)B.shape = (2,3,1),您将得到形状为(2,4,1)C

C = K.batch_dot(A, B, axes=1) 
+0

谢谢你的回答!但是,它不符合我的问题。在我的描述中可能会有些混乱,我已经编辑它以使其更清晰。 – zhuzilin

+0

你可以举两个矩阵为例,做你想在Numpy中做什么? –