卷积神经网络(CNN)是深度学习领域中一种常用于图像分类任务的神经网络,例如物体和面部识别。CNN特别适合处理具有网格状拓扑结构的输入数据。与传统的全连接神经网络相比,CNN通过部分连接性减少了节点间的连接,这有助于防止过拟合问题,并加快了网络的收敛速度。
CNN的核心概念是卷积操作,这是一种在数字信号处理领域非常常见的数学运算。卷积定义为两个函数的乘积,结果是一个表示这两个函数重叠程度的第三个函数。在CNN中,通过滑动一个称为核(kernel)的滤波器来实现卷积。在物体识别中,卷积操作使能够检测图像中的不同特征,如垂直和水平边缘、纹理和曲线。这也是为什么任何CNN的第一个层通常是卷积层。
CNN中另一个常见的层是池化层。池化用于减少图像表示的大小,这转化为参数数量的减少,最终减少计算工作量。最常见的池化类型是最大池化,它使用类似于卷积操作中的滑动窗口,在每个位置收集一组单元格中的最大值。最后,它根据收集到的最大值构建图像的新表示。
与卷积相关的另一个概念是填充。填充确保卷积过程能够均匀地发生在整个图像上,包括边界像素。这种保证是通过在缩小后的图像(池化后)周围添加零像素边框来实现的,以便滑动窗口可以对图像的所有像素进行相同次数的操作。
最常见的CNN架构通常以卷积层开始,接着是激活层,然后是池化层,最后以传统的全连接网络结束,如多层神经网络。这种模型,其中层依次放置,被称为顺序模型。为什么最后是全连接网络?为了学习经过卷积和池化变换后的图像的非线性特征组合。
以下是将实现的CNN架构:
Conv2D层 - 32个过滤器,过滤器大小为3
使用ReLU函数的激活层
Conv2D层 - 32个过滤器,过滤器大小为3
使用ReLU函数的激活层
MaxPooling2D层 - 应用(2, 2)池化窗口
DropOut层,25% - 通过随机丢弃前一层的一些值(将它们设置为0)来防止过拟合;也称为稀释技术
Conv2D层 - 64个过滤器,过滤器大小为3
使用ReLU函数的激活层
Conv2D层 - 64个过滤器,过滤器大小为3,步长为3
使用ReLU函数的激活层
MaxPooling2D层 - 应用(2, 2)池化窗口
DropOut层,25%
Flatten层 - 将数据转换为下一层使用
Dense层 - 表示具有512个节点的全连接传统神经网络
使用ReLU函数的激活层
DropOut层,50%
Dense层,节点数与问题中的类别数相匹配 - 对于使用的硬币图像数据集为60
Softmax层
提出的架构遵循了一种用于物体识别CNN架构的模式;层参数已经通过实验进行了微调。
public class Settings
{
public const int ImgWidth = 64;
public const int ImgHeight = 64;
public const int MaxValue = 255;
public const int MinValue = 0;
public const int Channels = 3;
public const int BatchSize = 12;
public const int Epochs = 10;
public const int FullyConnectedNodes = 512;
public const string LossFunction = "categorical_crossentropy";
public const string Accuracy = "accuracy";
public const string ActivationFunction = "relu";
public const string PaddingMode = "same";
public static StringOrInstance Optimizer = new RMSprop(lr: Lr, decay: Decay);
private const float Lr = 0.0001f;
private const float Decay = 1e-6f;
}