C#中的深度学习:Keras.NET中的硬币识别,第一部分

在这里,我们将介绍卷积神经网络(CNN),并介绍我们将训练以识别硬币的CNN架构。

什么是CNN?正如我们在该系列的上一篇文章中提到的,CNN是一类神经网络(NN),通常用于图像分类任务,例如对象和面部识别,并且通常用于输入可能具有类似网格的问题拓扑。在CNN中,并非每个节点都连接到下一层的所有节点。这种部分连通性有助于防止完全连接的NN中出现过拟合问题,并加快NN的收敛速度。

围绕CNN的核心概念是称为卷积的数学运算,这在数字信号处理领域非常普遍。卷积定义为两个函数的乘积,产生第三个函数,该函数表示前两个函数之间的重叠量。在CNN领域,通过在图像上滑动一个称为kernel的过滤器来实现卷积。

在对象识别中,卷积操作使我们能够检测图像中的不同特征,例如垂直和水平边缘,纹理和曲线。这就是为什么任何CNN中的第一层都是卷积层的原因。

CNN中另一个常见的层是池化层。池化用于减小图像表示的大小,这意味着减少了参数数量,并最终减少了计算量。最常见的合并类型是最大合并,它使用类似于卷积操作中的滑动窗口的滑动窗口,以在每个位置中从匹配的单元格组中获取最大值。最后,它根据收获的最大值构建图像的新表示。

与卷积有关的另一个概念是填充。填充可确保卷积过程将在包括边界像素的整个图像上均匀发生。这种保证得到了在缩小图像周围(在合并之后)添加的零像素边框的支持,以便滑动窗口可以多次访问图像的所有像素。

最常见的CNN架构通常从卷积层开始,然后是激活层,然后是池化层,最后以传统的完全连接网络(例如多层NN)结束。这种类型的模型将层一层接一层地放置,称为顺序模型。为什么最后要建立一个完全连接的网络?学习转换图像中特征的非线性组合(在卷积和合并之后)。

这是我们将在CNN中实现的架构:

  • Conv2D层——32个过滤器,过滤器大小为3
  • 使用ReLU函数的激活层
  • Conv2D层——32个过滤器,过滤器大小为3
  • 使用ReLU函数的激活层
  • MaxPooling2D图层——应用(22)池窗口
  • 25%的DropOut层——通过从前一层中随机删除一些值(将其设置为0)来防止过度拟合;又名稀释技术
  • Conv2D层——64个过滤器,过滤器大小为3
  • 使用ReLU函数的激活层
  • Conv2D层——64个过滤器,过滤器大小为3,步幅为3
  • 使用ReLU函数的激活层
  • MaxPooling2D图层——应用(22)池窗口
  • DropOut层,占25
  • 展平层——转换要在下一层使用的数据
  • 密集层——表示具有512个节点的完全连接的传统NN
  • 使用ReLU函数的激活层
  • DropOut层,占50
  • 密集层,节点数与问题中的类数匹配——使用的硬币图像数据集为60
  • Softmax

提出的架构遵循一种用于对象识别CNN架构的模式;层参数已通过实验进行了微调。

我们经过的参数微调过程的结果部分存储在我们在此处提供的Settings类中:

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;
}

现在,我们有了CNN的体系结构,将在下一篇文章中介绍。在接下来的交付中,我们将考察我们使用Keras.NET实现了硬币识别的CNN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值