如何利用tf.math.reduce()将TensorFlow张量缩减至指定通道数?
张量通道求和缩减实现方法
针对你要把形状为(batches, h, w, d, 15)的张量缩减为(batches, h, w, d, 5)的需求,核心思路是先拆分多余的通道维度,再在拆分出的子维度上求和,具体步骤如下:
步骤1:重塑张量拆分通道
把最后一维的15个通道拆分为(5, 3)的结构,让每3个待合并的通道归为一组:import tensorflow as tf # 假设输入张量为input_tensor,形状是(batches, h, w, d, 15) reshaped = tf.reshape(input_tensor, shape=(-1, h, w, d, 5, 3))这里的
-1会自动匹配batch维度,无需手动指定具体数值。步骤2:在子维度上求和合并
对最后新增的维度(每组的3个通道)执行求和操作,得到目标形状:output_tensor = tf.reduce_sum(reshaped, axis=-1)指定
axis=-1表示对最后一个维度求和,求和后该维度会被消除,最终输出形状就是(batches, h, w, d, 5)。
灵活适配写法
如果不想手动计算通道拆分倍数,可用动态计算适配任意整数倍的通道缩减需求:
y = 5 # 目标通道数 x = input_tensor.shape[-1] # 原始通道数 split_num = x // y reshaped = tf.reshape(input_tensor, shape=(*input_tensor.shape[:-1], y, split_num)) output_tensor = tf.reduce_sum(reshaped, axis=-1)
内容的提问来源于stack exchange,提问作者OPRESTON
相关产品推荐
相关产品推荐

