以 None 作为第一维的 Tensorflow Keras 张量乘法
Tensorflow Keras Tensor Multiplication with None as First Dimension
我正在使用 TensorFlow Keras 后端,我有两个相同形状的张量 a
、b
:(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()
我正在使用 TensorFlow Keras 后端,我有两个相同形状的张量 a
、b
:(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()