首页 > 解决方案 > 张量流中的3D矩阵乘法:AAB和AAB矩阵得到一个新的AAB矩阵

问题描述

假设我有两个尺寸为 32x32x3(通道数=3)的图像。我想在 Tensorflow 中为这 3 个通道中的每一个在第一个和第二个维度上乘以它们(如“matmul”函数)以获得新的 32x32x3 图像。有人可以帮我弄这个吗?像这样的循环:

#x.shape=(32,32,3)
#y.shape=(32,32,3)
a = np.zeros((x.shape[-3], x.shape[-2], x.shape[-1],), dtype='float32')
for i in range(a.shape[-1]):
    a[:, :, i] = tf.matmul(x[:, :, i], y[:, :, i])
a = tf.convert_to_tensor(a, dtype=tf.float32)

但我想知道有没有更有效的方法来做到这一点?

标签: pythontensorflowmatrix3d

解决方案


事实上,我找到了答案。matmul 也适用于 3d 数组。但是,特征(通道)需要在 matmul 函数中排在第一位。所以我们需要使用 tf.transpose 如果通道被放置在最后一个维度,如下所示:

x=tf.transpose(x, perm=[2, 0, 1])
y=tf.transpose(y, perm=[2, 0, 1])

a=tf.matmul(x,y)
a=tf.transpose(a, perm=[1, 2, 0])

它给出的结果与我上面写的循环相同。


推荐阅读