在Keras自定义层中乘以3矩阵

在Keras自定义层中乘以3矩阵,keras,matrix-multiplication,Keras,Matrix Multiplication,我想创建一个自定义Keras层,用于计算2个输入矩阵和1个权重矩阵(对角矩阵)之间的乘积:x W y 我想要用形状(?,8,10)计算xWy的输出矩阵 我尝试: K.dot(x*W, K.transpose(Y)) # Raise Dimension error K.dot(x*W, Permute(2,1))(Y)) # (?, 8, ?, 10) 没有第一个维度(批量大小),我知道如何做,但有了它,我有点不知所措。您可以指定在Keras点层中获取点积的轴。以下代码显示了如何将输入相乘x和y

我想创建一个自定义Keras层,用于计算2个输入矩阵和1个权重矩阵(对角矩阵)之间的乘积:x W y

我想要用形状(?,8,10)计算xWy的输出矩阵

我尝试:

K.dot(x*W, K.transpose(Y)) # Raise Dimension error
K.dot(x*W, Permute(2,1))(Y)) # (?, 8, ?, 10)

没有第一个维度(批量大小),我知道如何做,但有了它,我有点不知所措。

您可以指定在Keras点层中获取点积的轴。以下代码显示了如何将输入相乘
x
y
。如果要添加权重矩阵
W
,可以采用类似的方法(首先乘以
x
W


您可以使用
K.batch\u dot
,它就是为此而设计的

 K.batch_dot(x*W, K.permute_dimensions(y, (0,2,1)), axes=[2, 1]) # (?, 8, 10)

你写的W是一个对角矩阵。W的形状不是吗?然后,我想用一个对角矩阵W(200200),权重只在对角线上,其余的在0,不可训练,但最简单的方法是使用向量W(200),然后做x*W(8200)。这正是我想要的。。。。我在医生里漏掉了。非常感谢。
x = Input((8,200)) # (?,8,200)
y = Input((10,200)) # (?,10,200)
output = keras.layers.Dot(axes=-1)([x, y]) # (?,8,10)
 K.batch_dot(x*W, K.permute_dimensions(y, (0,2,1)), axes=[2, 1]) # (?, 8, 10)