欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# 預(yù)處理識(shí)別硬幣的數(shù)據(jù)集

 更新時(shí)間:2020年12月23日 08:46:22   作者:碼農(nóng)譯站  
這篇文章主要介紹了c# 預(yù)處理識(shí)別硬幣的數(shù)據(jù)集的方法,幫助大家更好的利用c#進(jìn)行深度學(xué)習(xí),感興趣的朋友可以了解下

在文章中,我們將對(duì)輸入到機(jī)器學(xué)習(xí)模型中的數(shù)據(jù)集進(jìn)行預(yù)處理。

這里我們將對(duì)一個(gè)硬幣數(shù)據(jù)集進(jìn)行預(yù)處理,以便以后在監(jiān)督學(xué)習(xí)模型中進(jìn)行訓(xùn)練。在機(jī)器學(xué)習(xí)中預(yù)處理數(shù)據(jù)集通常涉及以下任務(wù):

  1. 清理數(shù)據(jù)——通過(guò)對(duì)周?chē)鷶?shù)據(jù)的平均值或使用其他策略來(lái)填補(bǔ)數(shù)據(jù)缺失或損壞造成的漏洞。
  2. 規(guī)范數(shù)據(jù)——將數(shù)據(jù)縮放值標(biāo)準(zhǔn)化到一個(gè)標(biāo)準(zhǔn)范圍,通常是0到1。具有廣泛值范圍的數(shù)據(jù)可能會(huì)導(dǎo)致不規(guī)范,因此我們將所有數(shù)據(jù)都放在一個(gè)公共范圍內(nèi)。
  3. 一種熱編碼標(biāo)簽——將數(shù)據(jù)集中對(duì)象的標(biāo)簽或類(lèi)編碼為N維二進(jìn)制向量,其中N是類(lèi)的總數(shù)。數(shù)組元素都被設(shè)置為0,除了與對(duì)象的類(lèi)相對(duì)應(yīng)的元素,它被設(shè)置為1。這意味著在每個(gè)數(shù)組中都有一個(gè)值為1的元素。
  4. 將輸入數(shù)據(jù)集分為訓(xùn)練集和驗(yàn)證集——訓(xùn)練集被用于訓(xùn)練模型,驗(yàn)證集是用于檢查我們的訓(xùn)練結(jié)果。

這個(gè)例子我們將使用Numpy.NET,它基本上是Python中流行的Numpy庫(kù)的.NET版本。

Numpy是一個(gè)專(zhuān)注于處理矩陣的庫(kù)。

為了實(shí)現(xiàn)我們的數(shù)據(jù)集處理器,我們?cè)赑reProcessing文件夾中創(chuàng)建Utils類(lèi)和DataSet類(lèi)。Utils類(lèi)合并了一個(gè)靜態(tài)Normalize 方法,如下所示:

public class Utils
  {
    public static NDarray Normalize(string path)
    {
      var colorMode = Settings.Channels == 3 ? "rgb" : "grayscale";
      var img = ImageUtil.LoadImg(path, color_mode: colorMode, target_size: (Settings.ImgWidth, Settings.ImgHeight));
      return ImageUtil.ImageToArray(img) / 255;
    }

  }

在這種方法中,我們用給定的顏色模式(RGB或灰度)加載圖像,并將其調(diào)整為給定的寬度和高度。然后我們返回包含圖像的矩陣,每個(gè)元素除以255。每個(gè)元素除以255是使它們標(biāo)準(zhǔn)化,因?yàn)閳D像中任何像素的值都在0到255之間,所以通過(guò)將它們除以255,我們確保了新的范圍是0到1,包括255。

我們還在代碼中使用了一個(gè)Settings類(lèi)。該類(lèi)包含用于跨應(yīng)用程序使用的許多常量。另一個(gè)類(lèi)DataSet,表示我們將要用來(lái)訓(xùn)練機(jī)器學(xué)習(xí)模型的數(shù)據(jù)集。這里我們有以下字段:

  1. _pathToFolder—包含圖像的文件夾的路徑。
  2. _extList—要考慮的文件擴(kuò)展名列表。
  3. _labels—_pathToFolder中圖像的標(biāo)簽或類(lèi)。
  4. _objs -圖像本身,表示為Numpy.NDarray。
  5. _validationSplit—用于將總圖像數(shù)劃分為驗(yàn)證集和訓(xùn)練集的百分比,在本例中,百分比將定義驗(yàn)證集與總圖像數(shù)之間的大小。
  6. NumberClasses-數(shù)據(jù)集中唯一類(lèi)的總數(shù)。
  7. TrainX -訓(xùn)練數(shù)據(jù),表示為Numpy.NDarray。
  8. TrainY -訓(xùn)練標(biāo)簽,表示為Numpy.NDarray。
  9. ValidationX—驗(yàn)證數(shù)據(jù),表示為Numpy.NDarray。
  10. ValidationY-驗(yàn)證標(biāo)簽,表示為Numpy.NDarray。

這是DataSet類(lèi):

public class DataSet
  {
    private string _pathToFolder;
    private string[] _extList;
    private List<int> _labels;
    private List<NDarray> _objs;
    private double _validationSplit;
    public int NumberClasses { get; set; }
    public NDarray TrainX { get; set; }
    public NDarray ValidationX { get; set; }
    public NDarray TrainY { get; set; }
    public NDarray ValidationY { get; set; }

    public DataSet(string pathToFolder, string[] extList, int numberClasses, double validationSplit)
    {
      _pathToFolder = pathToFolder;
      _extList = extList;
      NumberClasses = numberClasses;
      _labels = new List<int>();
      _objs = new List<NDarray>();
      _validationSplit = validationSplit;
    }

    public void LoadDataSet()
    {
      // Process the list of files found in the directory.
      string[] fileEntries = Directory.GetFiles(_pathToFolder);
      foreach (string fileName in fileEntries)
        if (IsRequiredExtFile(fileName))
          ProcessFile(fileName);

      MapToClassRange();
      GetTrainValidationData();
    }

    private bool IsRequiredExtFile(string fileName)
    {
      foreach (var ext in _extList)
      {
        if (fileName.Contains("." + ext))
        {
          return true;
        }
      }

      return false;
    }

    private void MapToClassRange()
    {
      HashSet<int> uniqueLabels = _labels.ToHashSet();
      var uniqueLabelList = uniqueLabels.ToList();
      uniqueLabelList.Sort();

      _labels = _labels.Select(x => uniqueLabelList.IndexOf(x)).ToList();
    }

    private NDarray OneHotEncoding(List<int> labels)
    {
      var npLabels = np.array(labels.ToArray()).reshape(-1);
      return Util.ToCategorical(npLabels, num_classes: NumberClasses);
    }

    private void ProcessFile(string path)
    {
      _objs.Add(Utils.Normalize(path));
      ProcessLabel(Path.GetFileName(path));
    }

    private void ProcessLabel(string filename)
    {
      _labels.Add(int.Parse(ExtractClassFromFileName(filename)));
    }

    private string ExtractClassFromFileName(string filename)
    {
      return filename.Split('_')[0].Replace("class", "");
    }

    private void GetTrainValidationData()
    {
      var listIndices = Enumerable.Range(0, _labels.Count).ToList();
      var toValidate = _objs.Count * _validationSplit;
      var random = new Random();
      var xValResult = new List<NDarray>();
      var yValResult = new List<int>();
      var xTrainResult = new List<NDarray>();
      var yTrainResult = new List<int>();

      // Split validation data
      for (var i = 0; i < toValidate; i++)
      {
        var randomIndex = random.Next(0, listIndices.Count);
        var indexVal = listIndices[randomIndex];
        xValResult.Add(_objs[indexVal]);
        yValResult.Add(_labels[indexVal]);
        listIndices.RemoveAt(randomIndex);
      }

      // Split rest (training data)
      listIndices.ForEach(indexVal => 
      { 
        xTrainResult.Add(_objs[indexVal]);
        yTrainResult.Add(_labels[indexVal]);
      });

      TrainY = OneHotEncoding(yTrainResult);
      ValidationY = OneHotEncoding(yValResult);
      TrainX = np.array(xTrainResult);
      ValidationX = np.array(xValResult);
    }
}

下面是每個(gè)方法的說(shuō)明:

  1. LoadDataSet()——類(lèi)的主方法,我們調(diào)用它來(lái)加載_pathToFolder中的數(shù)據(jù)集。它調(diào)用下面列出的其他方法來(lái)完成此操作。
  2. IsRequiredExtFile(filename) - 檢查給定文件是否包含至少一個(gè)應(yīng)該為該數(shù)據(jù)集處理的擴(kuò)展名(在_extList中列出)。
  3. MapToClassRange() -獲取數(shù)據(jù)集中唯一標(biāo)簽的列表。
  4. ProcessFile(path) -使用Utils.Normalize方法對(duì)圖像進(jìn)行規(guī)格化,并調(diào)用ProcessLabel方法。
  5. ProcessLabel(filename)——將ExtractClassFromFileName方法的結(jié)果添加為標(biāo)簽。
  6. ExtractClassFromFileName(filename) -從圖像的文件名中提取類(lèi)。
  7. GetTrainValidationData()——將數(shù)據(jù)集劃分為訓(xùn)練子數(shù)據(jù)集和驗(yàn)證子數(shù)據(jù)集。

在本系列中,我們將使用https://cvl.tuwien.ac.at/research/cvl-databases/coin-image-dataset/上的硬幣圖像數(shù)據(jù)集。

要加載數(shù)據(jù)集,我們可以在控制臺(tái)應(yīng)用程序的主類(lèi)中包含以下內(nèi)容:

var numberClasses = 60;
var fileExt = new string[] { ".png" };
var dataSetFilePath = @"C:/Users/arnal/Downloads/coin_dataset";
var dataSet = new PreProcessing.DataSet(dataSetFilePath, fileExt, numberClasses, 0.2);
dataSet.LoadDataSet();

我們的數(shù)據(jù)現(xiàn)在可以輸入到機(jī)器學(xué)習(xí)模型中。下一篇文章將介紹監(jiān)督機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí),以及訓(xùn)練和驗(yàn)證階段包括哪些內(nèi)容。它是為沒(méi)有AI經(jīng)驗(yàn)的讀者準(zhǔn)備的。

以上就是c# 預(yù)處理識(shí)別硬幣的數(shù)據(jù)集的詳細(xì)內(nèi)容,更多關(guān)于c# 識(shí)別數(shù)據(jù)集的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c# 進(jìn)程和線(xiàn)程的區(qū)別與聯(lián)系

    c# 進(jìn)程和線(xiàn)程的區(qū)別與聯(lián)系

    這篇文章主要介紹了c# 進(jìn)程和線(xiàn)程的區(qū)別與聯(lián)系,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C# FileStream文件讀寫(xiě)詳解

    C# FileStream文件讀寫(xiě)詳解

    本文主要介紹C#使用 FileStream 讀取數(shù)據(jù),寫(xiě)入數(shù)據(jù)等操作,希望能幫到大家。
    2016-04-04
  • c# 調(diào)用.bat文件的實(shí)現(xiàn)代碼

    c# 調(diào)用.bat文件的實(shí)現(xiàn)代碼

    c# 調(diào)用.bat文件主要利用了using System.Diagnostics;命名空間,大家可以參考下。
    2009-06-06
  • C#實(shí)現(xiàn)較為實(shí)用的SQLhelper

    C#實(shí)現(xiàn)較為實(shí)用的SQLhelper

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)較為實(shí)用SQLhelper的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Winform窗體傳值的方法(示例)

    Winform窗體傳值的方法(示例)

    C#開(kāi)發(fā)windows應(yīng)用程序項(xiàng)目時(shí),不同窗口之間傳值有很多中方法,在此給大家介紹兩種比較常用的winform窗體傳值的方法,有需要的朋友可以參考下
    2015-08-08
  • C#讀寫(xiě)Excel的流程步驟

    C#讀寫(xiě)Excel的流程步驟

    這篇文章主要介紹了詳解C#讀寫(xiě)Excel的流程步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起來(lái)學(xué)習(xí)吧
    2023-12-12
  • 詳解C#數(shù)據(jù)類(lèi)型及其轉(zhuǎn)換

    詳解C#數(shù)據(jù)類(lèi)型及其轉(zhuǎn)換

    這篇文章主要介紹了C#數(shù)據(jù)類(lèi)型及其轉(zhuǎn)換詳解,在C#中,數(shù)據(jù)類(lèi)型可以分為幾種類(lèi)型,今天小編通過(guò)本文給大家詳細(xì)介紹,需要的朋友可以參考下
    2020-07-07
  • 詳解c# PLINQ中的分區(qū)

    詳解c# PLINQ中的分區(qū)

    這篇文章主要介紹了c# PLINQ中的分區(qū)的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#添加Windows服務(wù) 定時(shí)任務(wù)

    C#添加Windows服務(wù) 定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了C#添加Windows服務(wù),定時(shí)任務(wù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • CefSharp過(guò)濾圖片RequestHandler問(wèn)題

    CefSharp過(guò)濾圖片RequestHandler問(wèn)題

    這篇文章主要介紹了CefSharp過(guò)濾圖片RequestHandler問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論