TensorFlow中使用2D卷积处理4D输入实现单通道独立计算是否可行?
问题解答
结论
你给出的代码不能实现需求,且会直接触发维度不匹配报错。
原因说明
- Keras的
Conv2D层默认接收4维输入,格式为(批次大小, 高度, 宽度, 通道数),你传入的input_shape = (128, 128, 103, 1)是5维格式,不符合Conv2D的输入要求,运行时会直接报错。 - 就算你调整为标准4维输入,默认的
Conv2D计算逻辑也会融合所有输入通道的信息:卷积核会在全部103个通道上做乘加运算,完全做不到你要的通道独立处理效果。
正确实现方案
你完全不需要拆分图像为103组批次,直接使用Conv2D的groups参数就能实现通道维度的独立卷积,把groups设置为和输入通道数、输出通道数一致即可:
import tensorflow.keras from tensorflow.keras.layers import Conv2D model1 = tensorflow.keras.models.Sequential() # groups=103 代表将103个输入通道分成103组,每组独立完成卷积计算 model1.add(Conv2D( filters=103, kernel_size=(3,3), groups=103, input_shape = (128, 128, 103), padding='same' ))
该方案的输出尺寸为(批次大小, 128, 128, 103),输出的第i个通道完全对应输入第i个通道的单独卷积结果,和你逐个输入(128,128,1)图像进网络的效果完全一致。
如果你需要最终输出仅1个通道,只需要在上述层后再加一层Conv2D(filters=1, kernel_size=(1,1), padding='same')做逐点融合即可。
内容的提问来源于stack exchange,提问作者Nour
相关产品推荐
相关产品推荐

