python - 张量流中的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)
但我想知道有没有更有效的方法来做到这一点?
解决方案
事实上,我找到了答案。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])
它给出的结果与我上面写的循环相同。
推荐阅读
- c - 无效的转换 'void*' 到 'struct*'
- go - 如何使用 golang 运行 dir 命令?
- javascript - 用 javascript 和 html 制作卡片
- javascript - 服务器端还是 Clint 端 API 调用?
- sql - 查询以根据其最小值和最大值(范围)对数字进行排序
- gnat - Ada on microbit, GNAT
- sql - 如何在不使用多个更新查询的情况下更新多个记录?
- go - 将 emtpy 接口转换为 Golang 中的等效类型
- php - 如何创建合格的电子签名创建设备
- android - 如何捕获发送到 android 设备的 adb 命令