DenseNet与ResNet

article/2025/9/14 4:32:39

ResNet(深度残差网络)

深度残差网络
在这里插入图片描述

DenseNet

采用密集连接机制,即互相连接所有的层,每个层都会与前面所有层在channel维度上连接在一起,实现特征重用,作为下一层的输入。
这样不但缓解了梯度消失的现象,也使其可以在参数与计算量更少的情况下实现比ResNet更优的性能。
在这里插入图片描述

公式表示

H l ( ⋅ ) H_l(·) Hl()代表是非线性转化函数,是一个组合操作。其可能包括一系列的BN,ReLU,Pooling及Conv操作

传统的网络在l层的输出为:
x l = H l ( x l − 1 ) x_l=H_l(x_{l-1}) xl=Hl(xl1)
在这里插入图片描述

对于ResNet,增加了来自上一层输入:
x l = H l ( x l − 1 ) + x l − 1 x_l=H_l(x_{l-1})+x_{l-1} xl=Hl(xl1)+xl1
在这里插入图片描述

在DenseNet中,会连接前面所有层作为输入:
x l = H l ( [ x 0 , x 1 , . . . , x l − 1 ] ) x_l=H_l([x_{0},x_{1},... ,x_{l-1}]) xl=Hl([x0x1...xl1])
在这里插入图片描述
特征传递分方式是,直接将前面所有层的特征concat后传到下一层,而不是前面层都要有一个箭头指向后面所有层。
在这里插入图片描述

DenseNet网络结构

其密集连接方式需要特征图大小保持一致。所以Den seNet网络中使用DenseBlock+Transition的结构。
在这里插入图片描述
DenseBlock是包含很多层的模块,每个层的特征图大小相同,层与层之间采用密集连接方式。
Transition模块是连接两个相邻的DenseBlock,通过Pooling使特征图大小降低。
在这里插入图片描述
假定输入层的特征图channel数为 k 0 k_0 k0,DenseBlock中各个层卷积之后均输出k个特征图,即得到的特征图的channel数为k,那么l层输入的channel数为 k 0 + ( l − 1 ) k k_0+(l-1)k k0+(l1)k,我们将k称之为网络的增长率(Growth Rate),一般取k=12。
DenseBlock,采用了激活函数在前、卷积层在后的顺序,即BN-ReLU-Conv的顺序,这种方式也称为pre-activation。通常模型采用Conv-BN-ReLU,也被称为post-activation。作者证明,如果采用后者,性能会变差。

bottleneck层

由于后面层的输入会非常大,DenseBlock内部可以采用bottleneck层来减少计算量,主要是原有的结构中增加1*1 Conv,即
BN+ReLU+1✖️1 Conv+ BN+ReLU+3✖️3 Conv
称为DenseNet-B结构。其中1✖️1 Conv得到4k个(特征数量的4倍)特征图,作用是降低特征数量,从而提升计算效率。
在这里插入图片描述
每一个Bottleneck输出的特征通道数是相同的。
1✖️1 Conv的作用是固定输出通道数,达到降维的作用,其输出的通道数通常是GrowthRate的4倍。

Transition层

主要是连接两个相邻的DenseBlock,并且降低特征图大小,其结构为:
BN+ReLU+1✖️1 Conv+2✖️2 AvgPooling
起到压缩模型的作用。假设transition的上接denseblock得到的特征图channels数为m,transition层可以产生[µm]个特征(通过卷积层),其中µ=[0,1]为压缩系数。µ=1时,特征个数经过transition层没有变化,即无压缩;µ<1时,这种结构称为DenseNet-C,一般使用µ=0.5。
对于使用bottleneck层的denseblock结构和压缩系数小于1的transition组合结构称为DenseNet-BC

DenseNet的优势

1、更强的梯度流动、减轻了梯度消失;
2、减少了参数数量;
3、保存了低纬度的特征。在标准的卷积网络中,最终输出只会利用提取最高层次的特征,而在DenseNet中,使用了不同层次的特征,倾向于给出更平滑的决策边界。这也解释了为什么训练数据不足时DenseNet表现依旧良好。

DenseNet的不足

需要进行多次concat操作,数据需要被复制多次,显存容易增加得很快,需要一定的显存优化技术。另外,DenseNet是一种更为特殊的网络,ResNet则相对一般化一些,因此ResNet的应用范围更广泛。


http://chatgpt.dhexx.cn/article/F9rc4YOs.shtml

相关文章

DenseNet解读

Densely Connected Convolutional Networks ,作者清华姚班的刘壮&#xff0c;获得cvpr 2017 best paper。非常值得阅读。 DenseNet优势&#xff1a; &#xff08;1&#xff09;解决了深层网络的梯度消失问题 &#xff08;2&#xff09;加强了特征的传播 &#xff08;3&#xff…

MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

文章目录 1. 排名分类1.1 区别RANK&#xff0c;DENSE_RANK和ROW_NUMBER1.2 分组排名 2. 准备数据3. 不分组排名3.1 连续排名3.2 并列跳跃排名3.3 并列连续排名 4. 分组排名4.1 分组连续排名4.2 分组并列跳跃排名4.3 分组并列连续排名 在MYSQL的最新版本MYSQL8已经支持了排名函数…

tf.keras.layers.Dense函数

函数原型 tf.keras.layers.Dense(units, activationNone, use_biasTrue,kernel_initializerglorot_uniform,bias_initializerzeros, kernel_regularizerNone,bias_regularizerNone,activity_regularizerNone, kernel_constraintNone,bias_constraintNone, **kwargs )函数说明 …

DenseNet模型

《Densely Connected Convolutional Networks》阅读笔记 代码地址&#xff1a;https://github.com/liuzhuang13/DenseNet 首先看一张图&#xff1a; 稠密连接&#xff1a;每层以之前层的输出为输入&#xff0c;对于有L层的传统网络&#xff0c;一共有 L 个连接,对于DenseNe…

深入理解 keras 中 Dense 层参数

目录 引言深入理解 Dense 层的用法查看参数输入尺寸输出尺寸示例&#xff1a;用法完整示例示例一: 最小网络示例二&#xff1a;多维度数据示例三&#xff1a;特殊情况&#xff0c;待讨论 附录 引言 大家或许已经对深度学习不陌生了。不管是养家糊口工作还是科研学习早日毕业&a…

Keras大法(4)——Dense方法详解

Keras大法&#xff08;4&#xff09;——Dense方法详解 &#xff08;一&#xff09;keras.layers.Dense方法&#xff08;二&#xff09;使用示例&#xff08;三&#xff09;总 结 &#xff08;一&#xff09;keras.layers.Dense方法 在开始定义模型之前&#xff0c;我们有必要…

dense层、激活函数、输出层设计

Tensorflow——tf.layers.dense dense&#xff1a;全连接层 对于层方式的实现的时候&#xff01; layers.Dense(units,activation)函数一般只需要指定输出节点数Units和激活函数类型即可。输入节点数将根据第一次运算时输入的shape确定&#xff0c;同时输入、输出节点自动创建…

Dense层

1 常见参数 model.add(Dense(units, #输出的大小&#xff08;神经元个数&#xff09;activationNone, #激活函数use_biasTrue, #是否添加偏置kernel_initializerglorot_uniform, #权重矩阵初始化bias_initializerzeros, #偏置初始化kernel_regularizerNone, #权重矩阵的正则函…

Keras中dense层原理及用法解释

文章目录 一.全连接层Fully Connection作用二.API解释2.1 示例1&#xff1a;dense层为输入层2.2 示例2&#xff1a;dense层为中间层2.3 示例3&#xff1a;dense层为输出层 三.实现过程四.数学解释 一.全连接层Fully Connection作用 全连接的核心操作就是矩阵向量乘积 y W ∗…

矩阵运算实现求样本与样本之间欧式距离

前言 最近需要写关于kmeans的一些小程序&#xff0c;需要计算距离&#xff0c;直接写for循环又特别慢&#xff0c;再要是样本多一点&#xff0c;那简直了。细细一想&#xff0c;需要计算距离的地方还真不少&#xff0c;kmeans、KNN、图等等。 1. 理论指导 小学学过的公式&am…

实现两个点集的欧式距离和cos距离和索引值寻找(含有两种解法,for循环和矩阵操作)

一.计算欧式距离 1&#xff0c;直接for循环 两个点集points1&#xff0c;points2&#xff0c;用dist来存储距离 points1np.array([[1,2],[3,4]]) points2 np.array([[5, 6],[7,8]]) dist np.zeros(shape[points1.shape[0],points2.shape[0]]) for i in range(points1.sha…

计算样本欧式距离——python

任务描述 本关实现一个函数来计算欧几里得距离。 相关知识 通常数据集中的样本都可描述为一个 n 维向量 。每一个维度代表样本的一个属性。比如&#xff0c;对于用户 x 而言&#xff0c;其属性可能是收入、年龄、工作时间等&#xff0c;对于电影而言&#xff0c;其属性可能…

什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“

什么是范数&#xff0c;及其对应的 "曼哈顿距离"、"欧式距离"、"闵氏距离"、"切比雪夫距离" 一、什么是范数二、欧式距离&#xff08;对应L2范数&#xff09;三、曼哈顿距离&#xff08;对应L1范数&#xff09;三、闵氏距离&#xff0…

计算两个矩阵的行向量之间的欧式距离

1 问题描述 矩阵P的大小为[m, d] 用行向量表示为P1, P2,...,Pm 矩阵C的大小为[n, d] 用行向量表示为C1, C2,...,Cn 求矩阵P的每个行向量与矩阵C的每个行向量的欧氏距离 典型的例子是KNN算法应用于二维的点的聚类时&#xff0c;求取点与点之间的欧式距离时的情况。 2 …

标准化欧式距离

标准化欧式距离 在对长方体区域进行聚类的时候&#xff0c;普通的距离无法满足要求。 按照普通的距离聚类出的大多是圆形的区域&#xff0c;这时候要采用标准的欧式距离。 两个 n 维向量 a(X11,X12,X13,…X1n)与b(X21,X22,…X2n) 间的标准化欧氏距离公式为&#xff1a; 其中S…

Java实现的基于欧式距离的聚类算法的Kmeans作业

Kmeans作业 环境配置 java环境&#xff0c;使用原生的Java UI组件JPanel和JFrame 算法原理 基于欧式距离的聚类算法&#xff0c;其认为两个目标的距离越近&#xff0c;相似度越大。 该实验产生的点为二维空间中的点。 欧式距离 n维空间中的两个点X&#xff0c;Y d i s t…

python+dlib的欧式距离算法进行人脸识别

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85738944 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85738944 人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异&#xff0c;一般在…

计算欧式距离和余弦相似度

本文介绍Python计算欧式距离和余弦相似度。为了余弦相似度需要使用欧式距离&#xff0c;我们首先介绍欧式距离。 欧式距离 欧式距离标识两个向量之间的距离&#xff0c;计算公式如下&#xff1a; 欧式距离 Σ ( A i − B i ) 2 \sqrt{Σ(A_i-B_i)^2} Σ(Ai​−Bi​)2 ​ …

欧式距离和马式距离的区别

前言 为什么要讨论这两个距离之间的区别&#xff1f; 因为&#xff0c;距离函数的选择对数据挖掘算法的效果具有很大的影响&#xff0c;使用错误的距离函数对挖掘过程非常有害。有时候&#xff0c;语义非常相似的对象被认为不相似&#xff0c;而语义不相似的对象却被认为是相…

马氏距离(Mahalanobis Distance)与欧式距离

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标&#xff0c;同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距…