Dot类在keras的Merge中,根据Keras中文文档:https://keras-cn.readthedocs.io/en/latest/layers/merge/,
Merge层提供了一系列用于融合两个层或张量的层对象或方法,以大写首字母开头的是Layer类,以小写字母开头的是张量的函数,张量函数内部其实调用了大写字母开头的层。Dot类源代码如下:
先注意一点:keras中在一个Model中对张量操作时不考虑batch,都是基于单个样本的,比如定义输入张量时input=Input(H, W, C)并没有batch_size。
首先看一下类的定义:Dot层是计算两个张量中的样本间的点乘,因此两个基于batch的shape为(bacth_size, n)的张量a和b经过Dot层后输出的shape为(batch_size, 1),说明是batch中每一组对应的样本(也就是a[i]和b[i]这两个长度为n的向量)之间进行点乘。
class Dot(_Merge):
"""Layer that computes a dot product between samples in two tensors.
E.g. if applied to a list of two tensors `a` and `b` of shape `(batch_size, n)`,
the output will be a tensor of shape `(batch_size, 1)`
where each entry `i` will be the dot product between
`a[i]` and `b[i]`.
再看一下构造器内容:输入参数axes表示进行点乘的轴,可以是一个整数(两个样本要进行点乘的是同一个轴)也可以是整数的tuple/list(两个样本要进行点乘的轴不同);normalize表示是否在点乘前对axes进行L2-normalize,如果进行正则化(也就是样本在该轴上的向量元素平方和为1也就是单位向量),结果可以表示两样本间的余弦相似性。构造器中对axes进行了判断:是否为整数,是否为tuple或list。
# Arguments
axes: Integer or tuple of integers,
axis or axes along whic