Keras中K.batch_dot()解释

博主在学习Keras入门教程时,发现batch_dot()这个函数不好理解,在结合官方文档和其他博客以及博主自己的理解,整理如下:(注意:分了三个Case例子进行讲解,且理解从浅到深层依次递进。)
————————————————————————————————————————
Case1:x的shape为(128,1,2), y的shape为(128,2,768).则K.batch_dot(x, y)的结果shape为(128,1,768)

浅层理解:把batch即上式的128忽略掉,剩余的维度即(1,2)与(2,768)作矩阵相乘后补充上batch,结果为(128,1,768)
————————————————————————————————————————
Case2:x的shape为(32,20,1), y的shape为(32,30,20).则K.batch_dot(x, y , axes=(1, 2))的结果shape为(32,1,30)

中层理解:把batch即上式的32忽略掉,剩余的维度即(20,1)与(30,20)作矩阵相乘。首先我认为,该函数进行还是普通的矩阵乘法,但是两个输入矩阵的格式明显不符合,所以进行了类似reshape的操作,具体就是将x的矩阵的目标位移动到末尾,将y的矩阵的目标位移动到首位。(目标位可以查看参数axes=(1,2),该含义为x移动shape[1]的值,y移动shape[2]的值,前提是要确保shape[1]等于shape[2]的值)。如上例,去掉batch_size,原规格为(20,1)和(30,20),因为axes=(1,2),故变为(1,20)和(20,30)的矩阵乘法,结果为(1,30),加上batch_size即为(32,1,30)。
————————————————————————————————————————
Case3:x的shape为(2,2), y的shape为(2,2).则K.batch_dot(x, y , axes=1)的结果shape为(2,1)

深层理解:把batch即上式的2忽略掉,剩余的维度即(2)与(2)作矩阵相乘。将x的矩阵的目标位移动到末尾,变为(1,2);将y的矩阵的目标位移动到首位,变为(2,1)(其中的1由自己添加),矩阵相乘后得到(1,1)的结果,故output.shape为(2,1)。注意output的第一行的数为x的第一行与y的第一行对应元素相乘后相加的结果,假设 x = [[1, 2], [3, 4]] 和 y = [[5, 6], [7, 8]], batch_dot(x, y, axes=1) = [[17], [53]] (即x.dot(y.T) 的主对角线)。
————————————————————————————————————————

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值