天天看点

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

目录

编辑说明

数据准备

在Anndotnet中创建新的图像分类项目文件

在ANNdotNET中创建mlconfig

创建网络配置

结论

在这篇文章中,我们将为CIFAR-10数据集创建和训练深度学习模型,并了解如何使用ANNdotNET v1.2轻松实现这一点。

编辑说明

通过ANNdotNET 1.2,用户可以创建和训练用于图像分类的深度学习模型。图像分类模块提供最少的GUI操作,以便完全准备数据集。在这篇文章中,我们将为CIFAR-10数据集创建和训练深度学习模型,并了解如何使用ANNdotNET v1.2轻松实现这一点。

为了准备数据,我们必须从官方网站下载CIFAR-10数据集。CIFAR-10数据集由6个二进制批处理文件提供,可以在本地计算机上提取并保留。名称中的数字10表示为10个标签创建数据集。下图显示了10个CIFAR-10数据集标签,每个标签包含少量样本图像。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

CIFAR-10数据集(从Tiny Images学习多层特征,Alex Krizhevsky,2009年。)

该数据集包含60 000(50 000用于培训和验证,10 000用于测试)微小彩色图像尺寸为32×32。还有更大版本的数据集CIFAR-100有100个标签。我们的任务是创建深度学习模型,能够识别每个图像中的10个预定义标签中的一个。

数据准备

为了准备图像,我们需要执行以下操作:

  • 下载压缩文件(http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz)
  • 解压缩文件并将每个图像存储在10个代表图像标签的不同文件夹中
  • 每个文件夹包含一个标签的图像

下图显示了10个标签文件夹中保留的提取数据集。bird 文件夹打开并显示标记为bird 的所有图像。测试文件夹包含在模型定型后为测试模型而创建的所有图像。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

为了正确保存所有图像,我们需要创建一个简单的C#控制台应用程序,它应该提取并保存所有60 000个图像。完整的C#程序可以从这里下载。

为了成功提取图像,我们必须看看这些图像是如何存储在二进制文件中的。从官方网站,我们可以看到有5个用于培训,1个用于测试二进制文件:data_batch_1.bin,data_batch_2.bin,...,data_batch_5.bin,以及test_batch.bin。

每个文件的格式如下,这样数组的第一个字节就是标签索引,接下来的3072个字节代表图像。每批包含10000张图像。

重要的是要知道图像以CHW格式存储,这意味着创建1d图像阵列,使得前1024个字节是红色通道值,下一个1024是绿色通道值,最后1024个是蓝色通道值。值以行主顺序存储,因此前32个字节是图像第一行的红色通道值。为了结束这一点,在实现Extractor应用程序时已经执行了所有这些信息。最重要的方法是将1D字节数组重构为[3, height, width]图像张量,并从字节张量创建图像。以下实现显示了1D字节数组如何转换为3通道位图张量。

static int[][][] reshape(int channel, int height, int width,  byte[] img)
{
    var data = new int[channel][][];
    int counter = 0;
    for(int c = 0; c < channel; c++)
    {
        data[c] = new int[height][];
        for (int y = 0; y < height; y++)
        {
            data[c][y] = new int[width];
            for (int x = 0; x < width; x++)
            {
                data[c][y][x] = img[counter];
                counter++;
            }
        }
    }
    return data;
}
           

将1D字节数组转换为张量后,图像可以被创建并保留在磁盘上。以下方法遍历一个批处理文件中的所有10000个图像,提取它们并保留在磁盘上。

public static void extractandSave(byte[] batch, string destImgFolder, ref int imgCounter)
{
    var nStep = 3073;//1 for label and 3072 for image
    //
    for (int i = 0; i < batch.Length; i += nStep)
    {
        var l = (int)batch[i];
        var img = new ArraySegment<byte>(batch, i + 1, nStep - 1).ToArray();
// data in CIFAR-10 dataset is in CHW format, which means CHW: RR...R, GG..G, BB..B;

        // while HWC: RGB, RGB, ... RGB
        var reshaped = reshape(3, 32, 32, img);
        var image = ArrayToImg(reshaped);
        //check if folder exists
        var currentFolder = destImgFolder + classNames[l];

        if (!Directory.Exists(currentFolder))
            Directory.CreateDirectory(currentFolder);

        //save image to specified folder
        image.Save(currentFolder + "\\" + imgCounter.ToString() + ".png");

        imgCounter++;
   }
}
           

运行Cifar-Extractor控制台应用程序,下载,提取和保存图像的过程将在几分钟内完成。最重要的是CIFAR-10数据集将存储在c://sc/datasets/cifar-10路径中。当我们创建图像分类器时,这很重要。

现在我们在标签上排列的磁盘上有60000个小图像,我们可以开始创建深度学习模型了。

在Anndotnet中创建新的图像分类项目文件

打开最新的ANNdotNET v1.2并选择New-> Image Classification project。输入CIFAR项目名称,然后按“保存”按钮。下图显示了CIFAR new ann-project:

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

一旦我们有了一个新项目,我们就可以通过点击Add按钮开始定义图像标签。对于每10个标签,我们需要在列表中添加新标签项。在每个项目中,应定义以下字段:

  • 图像标签
  • 带有标签的图像的路径
  • 查询——如果我们需要使用名称的某些部分获取指定路径中的所有图像。如果指定路径中的所有图像都是指示一个标签的图像,则查询应为空字符串。

除了Label项之外,还应定义图像转换以定义图像的大小,以及创建验证/测试数据集的图像数量。

假设在c:/sc/datasets/cifar-10文件夹中提取CIFAR-10数据集,下图显示了应如何定义标签项:

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

如果应从列表中删除标签项,则通过选择项目,然后点击“删除”按钮来完成此操作。除了图像属性,我们还应该定义有多少图像属于验证数据集。可以看出,所有提取图像的20%将被创建验证数据集。请注意,测试文件夹中的图像不是这两个数据集的一部分。一旦训练模型,它们将用于测试阶段。现在我们完成了数据准备,我们可以进入下一步:创建mlconifg文件。

在ANNdotNET中创建mlconfig

通过选择New MLConfig命令,将在项目资源管理器中创建新的mlconfig文件。此外,通过在所选的mlconfig树项上按F2键,我们可以轻松地将名称更改为“ CIRAF-10-ConvNet”。我们给出这样一个名字的原因是因为我们将使用卷积神经网络。

为了定义mlconfig文件,我们需要定义以下内容:

  • 使用Visual Network Designer进行网络配置
  • 定义学习参数
  • 定义训练参数

创建网络配置

通过使用Visual Network Designer(VND),我们可以快速创建网络模型。对于这个CIFAR-10数据集,我们将创建11层模型,包括4个卷积层(Convolutional)、2个池(Pooling)、1个辍学层(DropOut )和3个密集(Dense)层,所有层后面都是缩放(Scale)层:

Scale (1/255)->Conv2D(32,[3,3])->Conv2D(32,[3,3])->Pooling2d([2,2],2)->

Conv2D(64,[3,3])->Conv2D(64,[3,3])->Pooling2d([2,2],2)->DropOut(0.5)->

Dense(64, TanH)->Dense(32, TanH)->Dense(10,Softmax)

可以创建此网络,以便我们从VND组合框中选择适当的图层,然后单击“添加”按钮。第一层是Scale层,因为我们需要将输入值标准化为区间(0,1)。然后我们创建了两个Convolution,Pooling图层序列。完成后,我们可以添加两个Dense图层,其中64和32个神经元具有TanH激活功能。最后一层是必须遵循输出维度的输出层,以及Softmax激活功能。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

一旦定义了网络模型,我们就可以进入下一步:设置学习和训练参数。

学习参数可以通过学习参数界面定义。对于此模型,我们可以选择:

  • AdamLearner以0.005率和0.9势头值。损失函数是ClassificationEntropyWithSoftmax,评估函数是ClassificationAccuracy
使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

为了定义训练参数,我们切换到训练选项卡页面并设置:

  • Epoch个数
  • Minibatch大小
  • 进度频率
  • 在培训期间随机化miniatch
使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

现在我们有足够的信息来开始模型培训。通过从应用程序功能区中选择“运行”命令来启动培训过程。为了获得好的模型,我们需要训练模型至少几千个纪元。下图显示了具有训练历史图表的训练模型。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

该模型使用恰好4071个纪元进行训练,使用了上述提到的网络参数。从上图可以看出,mini-batch损失函数是CrossEntropyWithSoftmax,而评估函数是Classification Accuracy。下图显示了训练模型的训练和验证数据集的性能。我们还可以认识到,验证数据集具有与训练数据集大致相同的精度,这表明模型训练得很好。有关模型性能的更多详细信息,请参见下一张图片:

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

上图中的上图显示了训练(左)和验证(右)的实际值和预测值。大多数点值都是蓝色并与橙色重叠,这表明大多数值都是正确预测的。可以缩放图表并查看每个值的详细信息。评估的底部显示了相应数据集的模型的性能参数。可以看出,训练模型对于训练数据集具有0.91的总体准确度,对于验证数据集具有0.826的总体准确度,这表明模型具有相当好的准确性。此外,接下来的两个图像显示了两个数据集的混淆矩阵,详细说明了模型如何预测所有10个标签。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论
使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

该文章的最后一部分是测试测试数据集的模型。为此,我们从测试集的每个标签中选择了10个随机图像,并评估模型。以下图像显示模型正确预测了所有10个图像。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

结论

ANNdotNET v1.2图像分类模块为图像分类提供完整的数据准备和模型开发。用户可以准备培训数据,使用Visual Network Designer创建网络模型,并针对训练模型执行一组统计工具,以验证和评估模型。重要的注意事项是,图像数据集必须存储在特定位置,以便使用博客文章中显示的训练模型。通过在CIFAR-10.zip feed示例上进行双击,可以将训练好的模型以及mlcofig文件直接加载到ANNdotNET项目资源管理器中。

使用ANNdotNET GUI工具创建CIFAR-10深度学习模型编辑说明数据准备在Anndotnet中创建新的图像分类项目文件在ANNdotNET中创建mlconfig创建网络配置结论

ANNdotNET作为开源项目,为深度学习模型的完整开发提供了一种出色的方式。

原文地址:https://www.codeproject.com/Articles/1273368/Create-CIFAR-10-Deep-Learning-Model-With-ANNdotNET

继续阅读