对keras点层感到困惑。点积如何计算?

问题描述 投票:2回答:1

我阅读了有关点层的所有文章,但都没有解释如何做,因此将计算输出形状!似乎很标准!沿特定轴的值如何精确计算?

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.]]]

我无法用我的数学和代数矩阵知识来理解这是怎么算出来的?

keras keras-layer
1个回答
0
投票

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)张量

© www.soinside.com 2019 - 2024. All rights reserved.