天天看點

使用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

繼續閱讀