在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在訓練過程中正確地把數據輸入給模型

XILINX開發者社區 ? 來源:XILINX開發者社區 ? 作者:XILINX開發者社區 ? 2021-07-01 10:47 ? 次閱讀

機器學習中一個常見問題是判定與數據交互的最佳方式。

在本文中,我們將提供一種高效方法,用于完成數據的交互、組織以及最終變換(預處理)。隨后,我們將講解如何在訓練過程中正確地把數據輸入給模型。

PyTorch 框架將幫助我們實現此目標,我們還將從頭開始編寫幾個類。PyTorch 可提供更完整的原生類,但創建我們自己的類可幫助我們加速學習。

第 1 部分:原始數據和數據集

首先我們把尚未經過組織的所有樣本稱為“原始數據”。

把“數據集”定義為現成可用的數據,即含標簽以及基本函數接口(以便于使用原始數據信息)的原始數據。

此處我們使用一種簡單的原始數據形式:1 個包含圖像和標簽的文件夾。

但此方法可擴展至任意性質的樣本(可以是圖片、錄音、視頻等)以及包含標簽的文件。

標簽文件中的每一行都用于描述 1 個樣本和相關標簽,格式如下:

file_sample_1 label1

file_sample_2 label2

file_sample_3 label3

(。。。)

當能夠完成一些基本信息查詢(已有樣本數量、返回特定編號的樣本、預處理每個樣本等)時,說明我們已從原始數據集創建了 1 個數據集。

此方法基于面向對象編程以及創建用于數據處理的 “類”。

對于一組簡單的圖像和標簽而言,此方法可能看上去略顯殺雞用牛刀(實際上,此用例通常是通過創建分別用于訓練、驗證和測試的獨立文件夾來進行處理的)。但如果要選擇標準交互方法,則此方法將來可復用于多種不同用例,以節省時間。

Python 中處理數據

在 Python 中所有一切都是對象:整數、列表、字典都是如此。

構建含標準屬性和方法的“數據集”對象的原因多種多樣。我認為,代碼的精致要求就足以合理化這一選擇,但我理解這是品味的問題。可移植性、速度和代碼模塊化可能是最重要的原因。

在許多示例以及編碼書籍中,我發現了面向對象的編碼(尤以類為甚)的其它有趣的功能和優勢,總結如下:

? 類可提供繼承

? 繼承可提供復用

? 繼承可提供數據類型擴展

? 繼承支持多態現象

? 繼承是面向對象的編碼的特有功能

■輸入 [1]:

import torch

from torchvision import transforms

to_tensor = transforms.ToTensor()

from collections import namedtuple

import functools

import copy

import csv

from PIL import Image

from matplotlib import pyplot as plt

import numpy as np

import os

import datetime

import torch.optim as optim

在我們的示例中,所有原始樣本都存儲在文件夾中。此文件夾的地址在 raw_data_path 變量中聲明。

■輸入 [2]:

raw_data_path = ‘。/raw_data/data_images’

構建模塊

數據集接口需要一些函數和類。數據集本身就是一個對象,因此我們將創建 MyDataset 類來包含所有重要函數和變量。

首先,我們需要讀取標簽文件,然后可對樣本在其原始格式(此處為 PIL 圖像)以及最終的張量格式應用某些變換。

我們需要使用以下函數來讀取 1 次標簽文件,然后創建包含所有樣本名稱和標簽的元組。

內存中緩存可提升性能,但如果標簽文件發生更改,請務必更新緩存內容。

■ 輸入 [113]:

DataInfoTuple = namedtuple(‘Sample’,‘SampleName, SampleLabel’)

def myFunc(e):

return e.SampleLabel

# in memory caching decorator: ref https://dbader.org/blog/python-memoization

@functools.lru_cache(1)

def getSampleInfoList(raw_data_path):

sample_list = []

with open(str(raw_data_path) + ‘/labels.txt’, mode = ‘r’) as f:

reader = csv.reader(f, delimiter = ‘ ’)

for i, row in enumerate(reader):

imgname = row[0]

label = int(row[1])

sample_list.append(DataInfoTuple(imgname, label))

sample_list.sort(reverse=False, key=myFunc)

# print(“DataInfoTouple: samples list length = {}”.format(len(sample_list)))

return sample_list

如需直接變換 PIL 圖像,那么以下類很實用。

該類僅含 1 種方法:resize。resize 方法能夠改變 PIL 圖像的原始大小,并對其進行重新采樣。如需其它預處理(翻轉、剪切、旋轉等),需在此類種添加方法。

當 PIL 圖像完成預處理后,即可將其轉換為張量。此外還可對張量執行進一步的處理步驟。

在以下示例種,可以看到這兩種變換:

■ 輸入 [4]:

class PilTransform():

“”“generic transformation of a pil image”“”

def resize(self, img, **kwargs):

img = img.resize(( kwargs.get(‘width’), kwargs.get(‘height’)), resample=Image.NEAREST)

return img

# creation of the object pil_transform, having all powers inherited by the class PilTransform

pil_transform = PilTransform()

以下是類 PilTransform 的實操示例:

■ 輸入 [5]:

path = raw_data_path + “/img_00000600.JPEG”

print(path)

im1 = Image.open(path, mode=‘r’)

plt.imshow(im1)

。/raw_data/data_images/img_00000600.JPEG

■ 輸出 [5]:

《matplotlib.image.AxesImage at 0x121046f5588》

■ 輸入 [6]:

im2 = pil_transform.resize(im1, width=128, height=128)

# im2.show()

plt.imshow(im2)

■ 輸出 [6]:

《matplotlib.image.AxesImage at 0x12104b36358》

最后,我們定義一個類,用于實現與原始數據的交互。

類 MyDataset 主要提供了 2 個方法:

__len__ 可提供原始樣本的數量。

__getitem__ 可使對象變為可迭代類型,并按張量格式返回請求的樣本(已完成預處理)。

__getitem__ 步驟:

1) 打開來自文件的樣本。

2) 按樣本的原始格式對其進行預處理。

3) 將樣本變換為張量。

4) 以張量格式對樣本進行預處理。

此處添加的預處理僅作為示例。

此類可對張量進行歸一化(求平均值和標準差),這有助于加速訓練過程。

請注意,PIL 圖像由范圍 0-255 內的整數值組成,而張量則為范圍 0-1 內的浮點數矩陣。

該類會返回包含兩個元素的列表:在位置 [0] 返回張量,在位置 [1] 返回包含 SampleName 和 SampleLabel 的命名元組。

■ 輸入 [109]:

class MyDataset():

“”“Interface class to raw data, providing the total number of samples in the dataset and a preprocessed item”“”

def __init__(self,

isValSet_bool = None,

raw_data_path = ‘。/’,

SampleInfoList = DataInfoTuple,norm = False,

resize = False,

newsize = (32, 32)

):

self.raw_data_path = raw_data_path

self.SampleInfoList = copy.copy(getSampleInfoList(self.raw_data_path))

self.isValSet_bool = isValSet_bool

self.norm = norm

self.resize = resize

self.newsize = newsize

def __str__(self):

return ‘Path of raw data is ’ + self.raw_data_path + ‘/’ + ‘《raw samples》’

def __len__(self):

return len(self.SampleInfoList)

def __getitem__(self, ndx):

SampleInfoList_tup = self.SampleInfoList[ndx]

filepath = self.raw_data_path + ‘/’ + str(SampleInfoList_tup.SampleName)

if os.path.exists(filepath):

img = Image.open(filepath)

# PIL image preprocess (examples)

#resize

if self.resize:

width, height = img.size

if (width 》= height) & (self.newsize[0] 》= self.newsize[1]):

img = pil_transform.resize(img, width=self.newsize[0], height=self.newsize[1])

elif (width 》= height) & (self.newsize[0] 《 self.newsize[1]):

img = pil_transform.resize(img, width=self.newsize[1], height=self.newsize[0])

elif (width 《 height) & (self.newsize[0] 《= self.newsize[1]):

img = pil_transform.resize(img, width=self.newsize[0], height=self.newsize[1])

elif (width 《 height) & (self.newsize[0] 》 self.newsize[1]):

img = pil_transform.resize(img, width=self.newsize[1], height=self.newsize[0])

else:

print(“ERROR”)

# from pil image to tensor

img_t = to_tensor(img)

# tensor preprocess (examples)

#rotation

ratio = img_t.shape[1]/img_t.shape[2]

if ratio 》 1:

img_t = torch.rot90(img_t, 1, [1, 2])

#normalization requires the knowledge of all tensors

if self.norm:

img_t = normalize(img_t)

#return img_t, SampleInfoList_tup

return img_t, SampleInfoList_tup.SampleLabel

else:

print(‘[WARNING] file {} does not exist’.format(str(SampleInfoList_tup.SampleName)))

return None

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8425

    瀏覽量

    132773
  • 數據集
    +關注

    關注

    4

    文章

    1208

    瀏覽量

    24739
  • PIL
    PIL
    +關注

    關注

    0

    文章

    19

    瀏覽量

    8630
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13251

原文標題:開發者分享 | 利用 Python 和 PyTorch 處理面向對象的數據集:1. 原始數據和數據集

文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    GPU是如何訓練AI大模型

    在AI模型訓練過程中,大量的計算工作集中在矩陣乘法、向量加法和激活函數等運算上。這些運算正是GPU所擅長的。接下來,AI部落小編帶您了解GPU是如何訓練AI大模型的。
    的頭像 發表于 12-19 17:54 ?151次閱讀

    如何訓練ai大模型

    源 :從可靠的來源獲取數據,如公開數據集、內部數據庫或第三方數據提供商。 2. 數據清洗 去除重復數據
    的頭像 發表于 10-17 18:17 ?1146次閱讀

    何在應用中正確設置THVD1505和SN65HVD888

    電子發燒友網站提供《如何在應用中正確設置THVD1505和SN65HVD888.pdf》資料免費下載
    發表于 09-18 10:25 ?0次下載
    如<b class='flag-5'>何在</b>應用<b class='flag-5'>中正確</b>設置THVD1505和SN65HVD888

    FP8模型訓練中Debug優化思路

    目前,市場上許多公司都積極開展基于 FP8 的大模型訓練,以提高計算效率和性能。在此,我們整理并總結了客戶及 NVIDIA 技術團隊在 FP8 模型訓練過程中的 debug 思路和方法
    的頭像 發表于 09-06 14:36 ?351次閱讀
    FP8<b class='flag-5'>模型</b><b class='flag-5'>訓練</b>中Debug優化思路

    BP神經網絡的基本結構和訓練過程

    網絡結構,通過誤差反向傳播算法(Error Backpropagation Algorithm)來訓練網絡,實現對復雜問題的學習和解決。以下將詳細闡述BP神經網絡的工作方式,涵蓋其基本原理、訓練過程、應用實例以及優缺點等多個方面。
    的頭像 發表于 07-10 15:07 ?4772次閱讀
    BP神經網絡的基本結構和<b class='flag-5'>訓練過程</b>

    解讀PyTorch模型訓練過程

    PyTorch作為一個開源的機器學習庫,以其動態計算圖、易于使用的API和強大的靈活性,在深度學習領域得到了廣泛的應用。本文將深入解讀PyTorch模型訓練的全過程,包括數據準備、
    的頭像 發表于 07-03 16:07 ?1103次閱讀

    深度學習的典型模型訓練過程

    深度學習作為人工智能領域的一個重要分支,近年來在圖像識別、語音識別、自然語言處理等多個領域取得了顯著進展。其核心在于通過構建復雜的神經網絡模型,從大規模數據中自動學習并提取特征,進而實現高效準確的預測和分類。本文將深入解讀深度學習中的典型
    的頭像 發表于 07-03 16:06 ?1553次閱讀

    神經網絡前向傳播和反向傳播在神經網絡訓練過程中的作用

    神經網絡是一種強大的機器學習模型,它通過模擬人腦神經元的連接方式來處理復雜的數據。神經網絡的核心是前向傳播和反向傳播算法。本文將詳細介紹神經網絡的前向傳播和反向傳播的區別,并探討它們在神經網絡訓練過程中
    的頭像 發表于 07-03 11:11 ?1492次閱讀

    CNN模型的基本原理、結構、訓練過程及應用領域

    CNN模型的基本原理、結構、訓練過程以及應用領域。 卷積神經網絡的基本原理 1.1 卷積運算 卷積運算是CNN模型的核心,它是一種數學運算
    的頭像 發表于 07-02 15:26 ?3828次閱讀

    卷積神經網絡的基本原理、結構及訓練過程

    訓練過程以及應用場景。 一、卷積神經網絡的基本原理 卷積運算 卷積運算是卷積神經網絡的核心,它是一種數學運算,用于提取圖像中的局部特征。卷積運算的過程如下: (1)定義卷積核:卷積核是一個小的矩陣,用于在輸入圖像上滑動,提取局
    的頭像 發表于 07-02 14:21 ?2710次閱讀

    PyTorch如何訓練自己的數據

    數據集。本文將深入解讀如何使用PyTorch訓練自己的數據集,包括數據準備、模型定義、訓練過程
    的頭像 發表于 07-02 14:09 ?1820次閱讀

    深度學習模型訓練過程詳解

    詳細介紹深度學習模型訓練的全過程,包括數據預處理、模型構建、損失函數定義、優化算法選擇、訓練過程
    的頭像 發表于 07-01 16:13 ?1364次閱讀

    何在多個外設中正確使用dma和spi?

    何在多個外設中正確使用 dma 和 spi
    發表于 05-29 07:21

    【大語言模型:原理與工程實踐】大語言模型的預訓練

    大語言模型的核心特點在于其龐大的參數量,這賦予了模型強大的學習容量,使其無需依賴微調即可適應各種下游任務,而更傾向于培養通用的處理能力。然而,隨著學習容量的增加,對預訓練數據的需求也相
    發表于 05-07 17:10

    【大語言模型:原理與工程實踐】核心技術綜述

    的復雜模式和長距離依賴關系。 預訓練策略: 預訓練是LLMs訓練過程的第一階段,模型在大量的文本數據上學習語言的通用表示。常用的預
    發表于 05-05 10:56
    主站蜘蛛池模板: 国产免费一区二区三区香蕉精| 免费一级牲交毛片| 玖玖国产| 久精品视频村上里沙| 国语自产拍在线观看7m| 国产免费高清福利拍拍拍| 大象焦伊人久久综合网色视| 一级片在线免费| 天堂在线视频| 国产精品成人一区二区| 日韩啪啪网| 狠狠色丁香久久婷婷综| 久久精品国产亚洲综合色| 国产成人精品1024在线| 午夜影院在线观看视频| 日在线视频| 我被黑人巨大开嫩苞在线观看| 亚洲一区二区高清| 在线播放黄色| 四虎影视入口| 激情综合站| 夜夜摸视频网| 国产成人综合网| 日本不卡视频在线观看| 校园 春色 欧美 另类 小说| 日本黄色片在线播放| 国产三级精品三级在线观看| 五月天综合婷婷| 1000又爽又黄禁片在线久| 欧美一区亚洲| 四虎影视入口| 久久www免费人成高清| www.91久久| 国产人人爱| 边做饭边被躁欧美三级小说| 色福利网站| 国内免费视频成人精品| 天天操天天干天搞天天射| 欧美黑人粗暴另类多交| 亚洲一区二区电影| 久久五月网|