以Keras为后端使用DLP开发一个分类应用

DLP全称为深度学习平台,是一款用于AI应用程序开发的软件,目前支持两种深度学习框架:Caffe和Keras。DLP旨在使开发人员专注于神经网络结构设计,而不必将大部分精力花费在学习深度学习框架上。

在本教程中,我们将使用DLP和Keras作为后端针对多类分类问题开发一个深度学习模型,涵盖以下主要内容:

  • 1. 如何使用DLP的数据模块为分类问题准备数据集;
  • 2. 如何利用DLP的神经网络库中现有的神经网络解决问题;
  • 3. 如何在DLP的训练模块中观察深度学习模型的训练过程;
  • 4. 如何在DLP的部署模块中使用训练好的模型对新的数据集进行批量推理。

  • 1. 环境配置

    在本教程中,我们将使用DLP中的Keras作为后端,因此,我们应该首先安装Keras。

    DLP已在带有Keras 2.2.4和Tensorflow后端的MacOS和Ubuntu 16.04系统上进行了测试。可以通过在终端中键入以下命令来安装TensorFlow:

    $ pip install tensorflow

    在带有英伟达GPU的系统中使用下面的命令安装TensorFlow:

    $ pip install tensorflow-gpu

    可以通过以下命令来安装Keras:

    $ pip install keras==2.2.4

    最好在终端中运行以下命令来检查以TensorFlow为后端的Keras是否正常运行:

    $ python -c 'import keras’

    如果TensorFlow和Keras安装正常,则该命令行应返回“Using TensorFlow backend”。

    然后访问DLP网站以下载其最新版本。


    2. 问题描述

    在本教程中,我们将在Fashion MNIST数据集上训练一个神经网络模型,以对衣服的图像进行分类,例如运动鞋和衬衫。Fashion MNIST数据集包含60,000个示例的训练集和10,000个示例的测试集。与MNIST相似,每个示例都是一个28x28灰度图像,一共10个类别(上衣,裤子,套头衫,衣服,外套,凉鞋,衬衫,运动鞋,包和脚踝靴)。

    您可以从这里下载数据集: fashion_mnist_data.tar.gz ,数据集具有以下目录结构:

    <training/testing> / <label> / <id>.png


    3. 在DLP中配置Keras

    假设您已经安装了最新版本的DLP(在此处获取),打开DLP,选择右上角菜单栏上设置按钮下的 Keras 选项,指定python环境的 bin path 。这是安装Keras和TensorFlow的环境,可以使用以下命令找到它:

    $ which python

    DLP界面的右下角有一个指示标签,用于显示当前DLP正在使用的深度学习框架,现在应该显示Keras。

    dlp

    对于分类任务,在 1. Select the data type 下选择 "Image",然后在 2. Select the model 下选择 "Classification"。

    点击 Continue 按钮进入数据模块。


    4. 准备数据

    在准备数据集进行模型训练之前,最好先为项目设置一个工作目录。通过单击功能栏左上角的 SetDir 按钮,然后选择(或创建)项目的工作目录。此外,窗口左下角有一个指示符,用于指示当前的工作目录。

    work dir

    将图像加载到DLP中需要两个步骤:

    1. 添加类标签(类别索引从0开始);

    2. 对于每个类别,添加相应的图像。

    Fashion MNIST是一个10分类问题,因此,我们将添加10个类别标签。在功能栏下单击 AddClass 按钮,然后为该类指定标签名称。对于第一类,标签为"top",对于最后一类,标签为"ankle_boot",依此类推。

    然后添加与类别标签相对应的图像,请首先在 Class Setting 面板上单击与其关联的黄色数字框,然后单击顶部功能面板上的 AddImg 添加与类标签对应的图像,如果想要清除所有该类别的图像,单击顶部功能面板上的 Clear 按钮。

    为每个类添加图像后,即可配置数据集,例如训练/验证拆分率,图像类型(灰度或RGB),编码类型(.png或.jpg)等等。从本地磁盘加载到DLP的图像是灰度还是RGB颜色都没有关系,因为后续在设计神经网络时可以根据应用程序指定所需的图像类型来更改其类型。例如,Fashion MNIST是灰度图像的数据集,但是通过为图像类型指定Color,DLP会将灰度图像转换为RGB图像。

    work dir

    现在,可以单击位于顶部功能面板上的 Convert 按钮,生成用于训练模型的数据集。在此数据准备阶段,我们不必担心图像的尺寸大小(即图像可以具有不同尺寸),我们将在神经网络模型的配置过程中解决此问题。


    5. 定义神经网络

    DLP提供了直观的界面,可以轻松地定义和构建神经网络,既可以从头开始定义自己的神经网络,也可以使用DLP的网络库中的定义好的网络架构。

    用DLP定义神经网络主要是将不同的网络组件(层)相互连接。在本教程中,主要用到一下组件:

    1. 输入层: 一般是神经网络的第一层。在这里,定义数据集源(来自Keras内置数据集或来自本地磁盘),图像数据集的所需形状(通过指定高度,宽度和通道参数)等;

    2. 隐藏层: 通常由相互连接的诸如卷积,合并,批处理规范化,全联接等层组成,在这里定义架构的隐藏层和输出层;

    3. 损失层: 应该连接到网络的输出层,在这里定义网络训练期间要最小化的目标函数;

    4. 准确度层: 应该连接到网络的输出层,在此处定义用于在训练期间评估模型的函数;

    5. 优化器: 是一个独立的网络层/组件,可以在其中指定求解器的参数,即定义要使用的优化算法并配置其参数;

    6. 网络配置: 可以定义模型训练过程,还可以在此处选择使用CPU还是GPU进行训练,该层是一个独立的组件。

    detection

    在本教程中,我们将使用网络库中的神经网络,而不是从头构建一个网络。我们要使用的网络是LeNet架构,在网络库中将名为LeNet的网络拖放到工作区中。

    输入层: 我们已经准备了自己的数据集,因此可以为Source参数指定Local disk,然后指定训练集和验证集的路径。接下来,我们需要定义数据集的形状。我们网络的输入应为形状(batch_size,高度,宽度,通道)。 由于我们的图像数据是灰度的,因此将通道设置为1。其他三个参数是根据经验定义的。虽然"Fashion MNIST"是由分辨率为28x28的图像组成,但我们将其重塑为56x56,然后我们可以在分辨率为56x56的图像上训练模型;

    隐藏层和输出层: 在这里,我们主要关注输出层,即单元/节点的数量应与数据集中的类标签的数量匹配。 由于我们的数据集具有10个类别标签,因此输出层 Units 参数应设置为10。此层(输出层)中的 Activation 应当设置为 Softmax ,因为我们正在处理多类分类问题。 隐藏层和输出层中还有多个其他参数可供您使用。 例如,您可以降低或增加在Dropout层中定义的辍学率。 最后, UseAsPrediction 参数是除输入层,损失层,准确度层,优化器和网络配置层以外每个层共有的重要参数,此参数告诉DLP哪个层是输出层;

    detection

    优化器: 我们将使用此层的默认值,即使用具有动量和学习率衰减的随机梯度下降(SGD)方法训练2个周期的神经网络;

    网络配置层: 我们将使用此层的默认值。 即每1个训练周期在验证集上计算模型的准确度,并仅保存最佳模型。

    正确配置所有层后,单击功能栏上的 Train 按钮,将网络结构(.prototxt)保存在本地磁盘上,并启动模型训练。


    6. 训练可视化

    现在,我们可以在每批次迭代时通过训练/验证损失和准确度曲线直观地观察训练过程。在第一个训练周期之后,训练集上的模型准确度达到了86%,而验证集上的准确度超过了87%。Keras模型文件是.h5或.hdf5文件,这些文件将保存在与网络结构文件同一目录中。

    detection

    7. 模型推理

    现在,我们可以在新的样本上测试模型。转到 Deploy 标签,然后通过顶部功能面板上的 AddInfer 按钮添加推理作业,然后在 Inference Configuration 中对其进行配置。

    首先,我们必须定义推理类型,然后通过Model参数加载训练好的模型,通过Prototxt参数加载网络结构文件,通过LabelFile参数加载标签文件,最后设定通信端口号(通过 PortNo. 参数),以防默认端口号被占用。单击推理作业名称右边的开关来启动推理作业。

    detection

    推理作业启动后,我们可以对新的样本进行推理。我们既可以从文件夹中加载一批图像,也可以一次加载一张图像。让我们加载一批图像,在测试集上评估训练好的模型。单击顶部功能面板上的 Image 按钮,然后选择包含测试集图像的文件夹。加载图像后,推理引擎将开始对每个图像进行推理,并返回预测的类标签和与之关联的概率。

    detection

    我们可以双击某一张图像并查看前5个预测的详细概率值。

    detection

    8. 总结

    在本教程中,我们获得了如何使用以Keras为后端的DLP解决多类分类问题的动手经验,涵盖了以下主要内容:

  • 1. 如何使用DLP的数据模块为Keras后端准备多类别分类的数据集;
  • 2. 如何使用DLP的网络模块定义和配置神经网络架构;
  • 3. 如何使用DLP的训练模块观察模型的训练过程;
  • 4. 如何使用DLP的部署模块加载训练好的模型在新数据上进行推理预测。
  • 如有任何疑问,请通过 [email protected] 与我们联系。