gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:20:28 25 4
gpt4 key购买 nike

我阅读了所有关于 Dot Layer 的文章,但没有一篇解释如何计算输出形状!虽然看起来很标准!使用 a 沿特定轴计算的值究竟是如何计算的?

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 .

首先,我认为您可能打算这样做,

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)

首先,您仅在批量维度上执行逐元素点。所以那个维度保持那样。

现在您可以忽略 ab 的第一维,并考虑两个矩阵 (3,4)(3,4) 并在最后一个轴上进行点积,从而生成 (3,3) 矩阵。现在添加您获得的批量维度,

(2, 3, 3) tensor

现在让我们举个例子。你有,

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
[[[0 1 1 1]
[1 1 0 0]
[0 0 1 1]]

[[1 1 1 0]
[0 0 1 0]
[0 1 0 0]]]

然后你做以下两个点积。

# 1st sample
[0 1 1 1] . [0 1 1 1]
[1 1 0 0] . [1 1 0 0]
[0 0 1 1] . [0 0 1 1]

# 2nd sample
[1 1 1 0] . [1 1 1 0]
[0 0 1 0] . [0 0 1 0]
[0 1 0 0] . [0 1 0 0]

这给出了,

# 1st sample
[3 1 2]
[1 2 0]
[2 0 2]

# 2nd sample
[ 3 1 1]
[ 1 1 0]
[ 1 0 1]

最后添加缺失的批处理维度,

[[[ 3.  1.  2.]
[ 1. 2. 0.]
[ 2. 0. 2.]]

[[ 3. 1. 1.]
[ 1. 1. 0.]
[ 1. 0. 1.]]]

关于keras - 对 keras 点层感到困惑。点积是如何计算的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com