模型布局逻辑: 本项目使用的DenseNet模型由多个麋集块(Dense Block)和过渡层(Transition Layer)组成,每个麋集块内的层与层之间通过麋集毗连(dense connections)相互毗连。DenseNet的核心创新在于每一层的输入是前面全部层的输出的拼接(concatenation),通过这种毗连方式,信息流动得以加强,同时也提拔了特征的重用。 Dense Layer:在麋集层中,每一层的输出定义为:
x l = H l ( [ x 0 , x 1 , … , x l − 1 ] ) x l = H l ( [ x 0 , x 1 , … , x l − 1 ] ) x l = H l ( [ x 0 , x 1 , … , x l − 1 ] ) xl=Hl([x0,x1,…,xl−1])x_{l} = H_{l}([x_0, x_1, \dots, x_{l-1}])xl=Hl([x0,x1,…,xl−1]) xl=Hl([x0,x1,…,xl−1])xl=Hl([x0,x1,…,xl−1])xl=Hl([x0,x1,…,xl−1])
其中,xl是第lll层的输出,Hl是通过Batch Normalization(BN)、ReLU激活函数和卷积操作定义的非线性变更,[x0,x1,…,xl−1]表现来自前面全部层的拼接结果。Dense Layer的两个重要部分:
1x1卷积,用于低落维度并镌汰盘算复杂度。
3x3卷积,用于提取特征。 Transition Layer:在每个Dense Block之间,会有过渡层(Transition Layer),其目的是通过1x1卷积和2x2平均池化(Average Pooling)镌汰特征图的数量和尺寸。假设输入的维度为Fin,过渡层的输出为:
x t r a n s i t i o n = AvgPool ( Conv1x1 ( x ) ) x_{transition} = \text{AvgPool}(\text{Conv1x1}(x)) xtransition=AvgPool(Conv1x1(x))
过渡层不仅能控制网络复杂度,还能避免模型过拟合。 团体架构:DenseNet的团体布局是由多个Dense Block堆叠而成,每个Dense Block之间通过Transition Layer毗连。在末了一层,通过全局平均池化(Global Average Pooling)来将高维的特征图压缩成固定大小的向量,接着毗连一个全毗连层(Fully Connected Layer)用于分类。 模型的团体训练流程: 模型的训练分为以下几个步骤: 前向传播:输入图像经过多层卷积层、麋集毗连层和过渡层后,提取出高维特征,最终通过全局平均池化层和全毗连层输出类别预测。 丧失盘算:使用交叉熵丧失函数(Cross-Entropy Loss)来度量模型输出与真实标签之间的误差:
L = − 1 N ∑ i = 1 N ∑ j = 1 C y i j log ( y ^ i j ) L = - \frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{C} y_{ij} \log(\hat{y}_{ij}) L=−N1i=1∑Nj=1∑Cyijlog(y^ij)
其中,N为样本数量,C为类别数,yij为第iii个样本的真实标签,y^ij为模型的预测概率。 反向传播与优化:通过反向传播盘算梯度,更新模型参数。优化器选择了Adam,能够自适应调整学习率,加快收敛。学习率的动态调整确保了训练过程中更为稳定的参数更新。 评估指标:模型的评估指标重要是分类准确率(Accuracy),通过在验证集上的表现来监控模型的泛化能力。分类准确率定义为:
Accuracy = 精确分类的样本数 总样本数 \text{Accuracy} = \frac{\text{精确分类的样本数}}{\text{总样本数}} Accuracy=总样本数精确分类的样本数
另外,还使用了混淆矩阵(Confusion Matrix)来评估每个类别的分类效果。
5. 核心代码具体解说