我阅读了有关点层的所有文章,但都没有解释如何做,因此将计算输出形状!似乎很标准!沿特定轴的值如何精确计算?
val = np.random.randint(2, size=(2, 3, 4))
a = K.variable(value=val)
val2 = np.random.randint(2, size=(2, 2, 3))
b = K.variable(value=val)
print("a")
print(val)
print("b")
print(val2)
out = Dot(axes = 2)([a,b])
print(out.shape)
print("DOT")
print(K.eval(out))
我得到:
a
[[[0 1 1 1]
[1 1 0 0]
[0 0 1 1]]
[[1 1 1 0]
[0 0 1 0]
[0 1 0 0]]]
b
[[[1 0 1]
[1 0 1]]
[[1 0 1]
[1 1 0]]]
(2, 3, 3)
DOT
[[[ 3. 1. 2.]
[ 1. 2. 0.]
[ 2. 0. 2.]]
[[ 3. 1. 1.]
[ 1. 1. 0.]
[ 1. 0. 1.]]]
我无法用我的数学和代数矩阵知识来理解这是怎么算出来的?
Dot
产品的工作原理。内部调用K.batch_dot
。
首先,我想您可能打算这样做,>
K.batch_dot
但是幸运的是,您曾经(或者也可能是最初的意图。无论如何要指出)
val = np.random.randint(2, size=(2, 3, 4))
a = K.variable(value=val)
val2 = np.random.randint(2, size=(2, 2, 3))
b = K.variable(value=val2) # You have val here
如果您有所需的代码,由于您要使用点积的尺寸不匹配,它将引发错误。继续前进,
您有
b = K.variable(value=val)
首先,您仅在批次尺寸上执行逐元素点。因此该维度保持不变。
现在您可以忽略a.shape = (2,3,4)
b.shape = (2,3,4)
和a
的第一维,并考虑两个矩阵b
和(3,4)
之间的点积,并在最后一个轴上进行点积,从而得出(3,4)
矩阵。现在添加您得到的批次尺寸,
((2,3,3)张量