卷积神经网络中的add和concat

本文解析了深度特征融合中Add(特征图相加)和Concat(通道数增加)的区别,介绍了它们在ResNet和DenseNet等网络中的应用,强调了保留原始激活和多尺度特征融合的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客:深度特征融合---理解add和concat之多层特征融合_xys430381_1的博客-优快云博客_特征图相加

在这里插入图片描述

 

Add是特征图相加,通道数不变

简言之,add是将多次提取到的语义信息叠加,会突出正确分类的比例,有利于最后分类,实现了正确分类的高激活

add单个通道的计算量:

在这里插入图片描述

实例

Resnet网络的残差结构将经过处理和未经过处理的输入进行add,目的保留原始图像中的正确高激活,避免在处理过程中对正确激活的削弱,所以才有了那句“有时候什么都不做才是最好的

Concat是通道数的增加

同Add相比,concat只是在特征图数量上增加了(叠加),增加了原图像的特征数,实现了多尺度特征的融合在特征图较多的情况下,add可以认为是特殊的concat形式,concat的计算量要远大于add操作

concat单个通道的计算量:

在这里插入图片描述

实例

分类网络DenseNet或者经典分割网络Unet结构都是使用低纬度特征图叠加高纬度特征图,进行特征融合在进行分类,因为高纬度和低纬度卷积核提取得到的特则是不同,低纬度倾向于提取轮廓特征,高纬度提取无法解释的高纬度融合特征,二者结合可以得到多个角度的特征,更有利于识别

在这里插入图片描述

在这里插入图片描述 

 

### 复数卷积神经网络 Python 实现代码 复数卷积神经网络(Complex Convolutional Neural Networks, CNNs)能够处理具有相位幅度信息的数据,在某些特定领域如音频信号处理、医学成像等方面表现出色。下面提供一段基于 TensorFlow Keras 的简单复数卷积神经网络实现示例。 ```python import tensorflow as tf from tensorflow.keras import layers, models class ComplexConv2D(layers.Layer): def __init__(self, filters, kernel_size, strides=1, padding='same', activation=None, **kwargs): super(ComplexConv2D, self).__init__(**kwargs) self.conv_re = layers.Conv2D(filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, activation=activation) self.conv_im = layers.Conv2D(filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, activation=activation) def call(self, inputs): real_input, imag_input = tf.split(inputs, num_or_size_splits=2, axis=-1) conv_real_part = self.conv_re(real_input) - self.conv_im(imag_input) conv_imag_part = self.conv_re(imag_input) + self.conv_im(real_input) return tf.concat([conv_real_part, conv_imag_part], axis=-1) def build_complex_cnn_model(input_shape=(None, None, 2)): model = models.Sequential() # 输入层假设输入数据已经分为实部虚部两个通道 model.add(ComplexConv2D(filters=32, kernel_size=(3, 3), input_shape=input_shape)) model.add(layers.MaxPooling2D(pool_size=(2, 2))) model.add(ComplexConv2D(filters=64, kernel_size=(3, 3))) model.add(layers.MaxPooling2D(pool_size=(2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(units=128, activation='relu')) model.add(layers.Dropout(rate=0.5)) # Dropout机制有助于防止过拟合[^1] model.add(layers.Dense(units=NUM_CLASSES, activation='softmax')) # NUM_CLASSES应根据具体任务定义 return model ``` 此代码片段展示了如何构建一个简单的复数卷积神经网络模型,其中包含了自定义的 `ComplexConv2D` 层来执行复数值上的卷积运算。注意这里假定输入张量的最后一维表示的是复数形式的数据,即每个像素点由一对浮点数组成分别代表该位置处的实部与虚部值。此外,为了提高泛化能力并减少过度适应训练集的风险,加入了 dropout 技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值