卷积神经网络源码
Ⅰ PyTorch 源码解读之 BN & SyncBN:BN 与 多卡同步 BN 详解
BatchNorm原理
BatchNorm最早在全连接网络中提出,旨在对每个神经元的输入进行归一化操作。在卷积神经网络(CNN)中,这一原理被扩展为对每个卷积核的输入进行归一化,即在channel维度之外的所有维度上进行归一化。BatchNorm带来的优势包括提高网络的收敛速度、稳定训练过程、减少过拟合现象等。
BatchNorm的数学表达式为公式[1],引入缩放因子γ和移位因子β,作者在文章中解释了它们的作用。
PyTorch中与BatchNorm相关的类主要位于torch.nn.moles.batchnorm模块中,包括如下的类:_NormBase、BatchNormNd。
具体实现细节如下:
_NormBase类定义了BN相关的一些属性。
初始化过程。
模拟BN的forward过程。
running_mean、running_var的更新逻辑。
γ、β参数的更新方式。
BN在eval模式下的行为。
BatchNormNd类包括BatchNorm1d、BatchNorm2d、BatchNorm3d,它们的区别在于检查输入的合法性,BatchNorm1d接受2D或3D的输入,BatchNorm2d接受4D的输入,BatchNorm3d接受5D的输入。
接着,介绍SyncBatchNorm的实现。
BN性能与batch size密切相关。在batch size较小的场景中,如检测任务,内存占用较高,单张显卡难以处理较多图片,导致BN效果不佳。SyncBatchNorm提供了解决方案,其原理是所有计算设备共享同一组BN参数,从而获得全局统计量。
SyncBatchNorm在torch/nn/moles/batchnorm.py和torch/nn/moles/_functions.py中实现,前者负责输入合法性检查以及参数设置,后者负责单卡统计量计算和进程间通信。
SyncBatchNorm的forward过程。
复习方差计算方式。
单卡计算均值、方差,进行归一化处理。
同步所有卡的数据,得到全局均值mean_all和逆标准差invstd_all,计算全局统计量。
接着,介绍SyncBatchNorm的backward过程。
在backward过程中,需要在BN前后进行进程间通信。这在_functions.SyncBatchNorm中实现。
计算weight、bias的梯度以及γ、β,进一步用于计算梯度。
Ⅱ 【Python图像分类系列】建立CNN模型实现猫狗图像分类(案例+源码)
Python图像分类系列:CNN模型实现猫狗识别(案例+源码概览)
这篇文章是第275篇关于Python图像分类的原创内容,着重讲解了如何使用CNN(卷积神经网络)在Keras框架下进行猫狗图像的识别任务。
在实践中,我们首先对数据进行了预处理。利用ImageDataGenerator,将图形文件转化为150x150的RGB张量,并配合二进制标签,生成的批量格式为(20,)。这个生成器会不断从目标文件夹中抽取并循环处理图像。
接着,构建了CNN模型,具体结构未在文中详述,但重点在于利用fit_generator方法进行模型拟合,通过设置steps_per_epoch参数来控制每个训练周期的数据量。模型的详细代码和配置可在源码中查看。
模型的性能评估部分展示了acc和loss曲线,这些曲线可以用来判断模型的性能和过拟合程度。
总结来说,通过这些步骤,我们成功地构建了一个CNN模型来区分猫和狗的图像,并通过实验得出模型的过拟合情况。作者拥有丰富的科研背景,发表过SCI论文,目前专注于数据算法研究,定期分享Python、机器学习等相关知识,致力于以简单易懂的方式分享技术内容。想了解更多细节和源码的朋友,可通过链接获取。