卷积神经网络及其在iOS中的集成(第1部分)


实施手段。

各种机器学习算法已集成到许多高级编程语言中。其中最受欢迎和增长最快的是Python。

TensorFlow是Google开发的用于机器学习的开放软件库,用于解决构建和训练神经网络以自动查找和分类图像的问题,从而实现人的感知质量。用于库的主要API是针对Python实现的。

Keras是一个开放的神经网络库。它是TensorFlow和Theano框架的附加组件。它旨在通过深度学习网络进行操作,同时设计为紧凑,模块化和可扩展的。

选择了最新版本的Python 3.7.2作为解释器。开发环境是PyCharm社区。

数据准备。

在现代世界中,对于大多数AI任务而言,无需手动收集数据集,在注册后,有许多资源可以下载现成的数据集。选择了手语十位数的数据集(图1)。

图。1。 -手语中的数字。

该算法将需要检测照片中是否存在手势,并使用0到9之间的数字对其进行分类。在构建神经网络的体系结构之前,您需要准备数据以对其进行训练。首先,下载手语数字数据集数据。第一个文件包含2063张黑白图片,并带有手语数字。图片的大小为64x64像素。第二个文件包含对应于图片的标签(矢量)。

图片中的像素值已归一化,且处于(0,1)区间内。您可以立即使用它们进入神经网络,但是如果遵循标准化程序,将会获得最佳结果。执行后,将为每个像素矩阵满足规则:矩阵中的

平均值为零。矩阵中
的色散为统一。

照片被标准化并添加到新阵列中,以便与先前的数据进行后续组合(

2)图2。 -加载和处理图像的步骤。

神经网络架构。

Network_sign_lang.py-描述神经网络的主项目文件。在脚本的开头,描述了神经网络的几个全局变量(图3)。

图3。 -全局选项。

Batch_size-每次迭代馈入神经网络的图像数量。 Num_classes-模型将预测的类数。 Img_size-提供给输入层的图像的大小。

Sklearn库中的train_test_split()函数被导入到项目中,它将以80:20的比例将X和y数组拆分为训练样本和测试样本,并且还随机混合数据,以使它们不会按类别排序。

然后初始化模型(图4),添加Conv2D的第一层。输入来自Xtrain数组的图像,指示输出空间的大小-64,卷积核-4x4,卷积步长和ReLU层的激活函数。

图4。 - 神经网络

由于神经网络通常使用大量的训练数据,因此构造的模型易于重新训练。为了避免这种情况,使用了一种有效的正则化方法,例如Dropout。该层将排除所指示百分比的随机神经元,以使各层之间没有积压。数字0.5表示每批算法将排除一半的随机神经元。第二主层也类似于第一层-卷积。 (Conv2D)

接下来是池化层(MaxPooling2D)。它用作模型输出的另一个过滤器。由于在水平或垂直显示数字时,图像的含义不会改变,因此神经网络应将其平均分类。

平坦层用作通过算法获得的数据与具有预测的输出向量之间的链接。网络的最后一层是具有sofmax激活功能的密集层。此函数使您可以为每个类获取概率的归一化向量,其中概率之和等于1。

接下来,您需要通过指定以下参数来编译创建的模型:度量,损失函数和优化器。作为一种度量,选择了准确性-正确分类的示例的百分比。损失函数是categorical_crossentropy。优化算法-亚当。在开始训练之前,添加了几个回调。 EarlyStopping-当神经网络的准确性随着学习时代的增长而停止增加时,停止学习神经网络。 ModelCheckpoint-将最佳模型权重保存到文件中以备后用。

神经网络的训练始于将有关其过程的数据保存到历史变量中。 Validation_split-采取训练数据的百分之十进行验证,这是另一种进行正则化的方法。

训练样本的大小为1965个示例,测试样本为547个,验证样本为219个。训练过程完成后,将根据所获得的准确性对训练和测试数据的依赖关系来绘制图形(图5)。

图5。 - 培训时间表。

该图显示该模型是在第15个时代保存的(具有最高的准确性,并且Xtrain和Xtest之间的差距最小)。

下一步是将生成的神经网络加载到另一个脚本中,以验证其功能。显示测试数据上指标的值(图6)。

图6。 -检查模型的性能。

根据度量的结果,我们可以得出结论,这些模型相差不大。损失函数指数越低,算法的预测就越有把握。该模型的准确性或逼真度显示正确分类的照片的百分比,这意味着它越高,神经网络越好。因此,使用因早期停止教育而获得的第一个模型更为合乎逻辑。

关于数据预处理和iOS应用程序中特定格式的神经网络的集成,我们将在下一部分中进行描述。

All Articles