K.dot与torch.dot的区别

在参考别人的tensorflow/keras代码时常遇到K.dot的使用,pytorch中也有torch.dot但是两个函数的含义并不相同

keras.backend.dot(x, y)

将 2 个张量(和/或变量)相乘并返回一个张量。
官网文档的例子:

# dot product between tensors
>>> x = K.placeholder(shape=(2, 3))
>>> y = K.placeholder(shape=(3, 4))
>>> xy = K.dot(x, y)
>>> xy
<tf.Tensor 'MatMul_9:0' shape=(2, 4) dtype=float32>

即一个(2,3)的张量乘上一个(3,4)的张量得到一个(2,4)的张量;三维乘二维

# dot product between tensors
>>> x = K.placeholder(shape=(32, 28, 3))
>>> y = K.placeholder(shape=(3, 4))
>>> xy = K.dot(x, y)
>>> xy
<tf.Tensor 'MatMul_9:0' shape=(32, 28, 4) dtype=float32>

可以发现其实就是进行了矩阵相乘

torch.dot

对两个一维张量进行点积计算

>>> torch.dot(torch.tensor([2, 3]), torch.tensor([2, 1]))
tensor(7)

那么torch中K.dot对应的方法是什么呢?

我们可以使用torch.matmul:

# vector x vector
tensor1 = torch.randn(3)
tensor2 = torch.randn(3)
torch.matmul(tensor1, tensor2).size()
# matrix x vector
tensor1 = torch.randn(3, 4)
tensor2 = torch.randn(4)
torch.matmul(tensor1, tensor2).size()
# batched matrix x broadcasted vector
tensor1 = torch.randn(10, 3, 4)
tensor2 = torch.randn(4)
torch.matmul(tensor1, tensor2).size()
# batched matrix x batched matrix
tensor1 = torch.randn(10, 3, 4)
tensor2 = torch.randn(10, 4, 5)
torch.matmul(tensor1, tensor2).size()
# batched matrix x broadcasted matrix
tensor1 = torch.randn(10, 3, 4)
tensor2 = torch.randn(4, 5)
torch.matmul(tensor1, tensor2).size()

你可能感兴趣的:(python,python,深度学习,pytorch,keras)