张量流Keras张量乘法,第一维为None



我使用TensorFlow Keras后端,我有两个形状相同的张量ab(None, 4, 7),其中None表示批次维度

我想做矩阵乘法,我希望得到(None, 4, 4)的结果
即,对于每个批次,执行一个matmul:(4,7)·(7,4) = (4,4)

这是我的代码——

K.dot(a, K.reshape(b, (-1, 7, 4)))

该代码给出了形状为(None, 4, None, 4)的张量

我想知道高维矩阵乘法是如何工作的?做这件事的正确方法是什么?

IIUC,您可以直接使用tf.matmul作为模型的一部分并转置b,也可以将操作显式包装在Lambda层中:

import tensorflow as tf
a = tf.keras.layers.Input((4, 7))
b = tf.keras.layers.Input((4, 7))
output = tf.matmul(a, b, transpose_b=True)
model = tf.keras.Model([a, b], output)
model.summary()
Model: "model_1"
__________________________________________________________________________________________________
Layer (type)                   Output Shape         Param #     Connected to                     
==================================================================================================
input_15 (InputLayer)          [(None, 4, 7)]       0           []                               
                            
input_16 (InputLayer)          [(None, 4, 7)]       0           []                               
                            
tf.linalg.matmul_2 (TFOpLambda  (None, 4, 4)        0           ['input_15[0][0]',               
)                                                                'input_16[0][0]']               
                            
==================================================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0
__________________________________________________________________________________________________

import tensorflow as tf
a = tf.keras.layers.Input((4, 7))
b = tf.keras.layers.Input((4, 7))
output = tf.keras.layers.Lambda(lambda x: tf.matmul(x[0], x[1], transpose_b=True))([a, b])
model = tf.keras.Model([a, b], output)
model.summary()

最新更新