chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

如何在訓練過程中正確地把數(shù)據(jù)輸入給模型

XILINX開發(fā)者社區(qū) ? 來源:XILINX開發(fā)者社區(qū) ? 作者:XILINX開發(fā)者社區(qū) ? 2021-07-01 10:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

第 1 部分:原始數(shù)據(jù)和數(shù)據(jù)集

首先我們把尚未經(jīng)過組織的所有樣本稱為“原始數(shù)據(jù)”。

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

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

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

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

file_sample_1 label1

file_sample_2 label2

file_sample_3 label3

(。。。)

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

此方法基于面向?qū)ο?a href="http://www.brongaenegriffin.com/v/tag/1315/" target="_blank">編程以及創(chuàng)建用于數(shù)據(jù)處理的 “類”。

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

Python 中處理數(shù)據(jù)

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

構(gòu)建含標準屬性和方法的“數(shù)據(jù)集”對象的原因多種多樣。我認為,代碼的精致要求就足以合理化這一選擇,但我理解這是品味的問題??梢浦残浴⑺俣群痛a模塊化可能是最重要的原因。

在許多示例以及編碼書籍中,我發(fā)現(xiàn)了面向?qū)ο蟮木幋a(尤以類為甚)的其它有趣的功能和優(yōu)勢,總結(jié)如下:

? 類可提供繼承

? 繼承可提供復用

? 繼承可提供數(shù)據(jù)類型擴展

? 繼承支持多態(tài)現(xiàn)象

? 繼承是面向?qū)ο蟮木幋a的特有功能

■輸入 [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’

構(gòu)建模塊

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

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

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

內(nèi)存中緩存可提升性能,但如果標簽文件發(fā)生更改,請務必更新緩存內(nèi)容。

■ 輸入 [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 圖像的原始大小,并對其進行重新采樣。如需其它預處理(翻轉(zhuǎn)、剪切、旋轉(zhuǎn)等),需在此類種添加方法。

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

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

■ 輸入 [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》

最后,我們定義一個類,用于實現(xiàn)與原始數(shù)據(jù)的交互。

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

__len__ 可提供原始樣本的數(shù)量。

__getitem__ 可使對象變?yōu)榭傻愋停磸埩扛袷椒祷卣埱蟮臉颖荆ㄒ淹瓿深A處理)。

__getitem__ 步驟:

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

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

3) 將樣本變換為張量。

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

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

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

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

該類會返回包含兩個元素的列表:在位置 [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

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

    關(guān)注

    66

    文章

    8528

    瀏覽量

    135854
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1229

    瀏覽量

    25900
  • PIL
    PIL
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    8895
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    812

    瀏覽量

    14415

原文標題:開發(fā)者分享 | 利用 Python 和 PyTorch 處理面向?qū)ο蟮臄?shù)據(jù)集:1. 原始數(shù)據(jù)和數(shù)據(jù)集

文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    何在Ray分布式計算框架下集成NVIDIA Nsight Systems進行GPU性能分析

    在大語言模型的強化學習訓練過程中,GPU 性能優(yōu)化至關(guān)重要。隨著模型規(guī)模不斷擴大,如何高效地分析和優(yōu)化 GPU 性能成為開發(fā)者面臨的主要挑戰(zhàn)之一。
    的頭像 發(fā)表于 07-23 10:34 ?1765次閱讀
    如<b class='flag-5'>何在</b>Ray分布式計算框架下集成NVIDIA Nsight Systems進行GPU性能分析

    如何正確地進行信號放大

    晶體管和運放都可以放大信號,但到底什么是信號放大,以及如何正確地進行信號放大。在學習電子設(shè)計的過程中,我從未在微控制器和邏輯門的世界里遇到過什么困難。但模擬電路是一個不同的故事;有好一陣子,我只能
    的頭像 發(fā)表于 04-15 11:52 ?935次閱讀
    如何<b class='flag-5'>正確地</b>進行信號放大

    MIMXRT1176如何在MBDT中正確實現(xiàn)自定義LUT?

    (peripherals.c peripherals.h),但我注意到它們在編譯時被覆蓋了。 如何在 MBDT 中正確實現(xiàn)自定義 LUT?此外,有沒有辦法修改默認 LUT 而不在編譯期間重置它?
    發(fā)表于 04-08 07:56

    請問如何在imx8mplus上部署和運行YOLOv5訓練模型?

    。我在 yo tflite 中轉(zhuǎn)換模型并嘗試在 tensorflow 腳本上運行模型,但它不起作用。 如何在 imx8mplus 上運行 YOLOv5 模型? 在 imx8mplus
    發(fā)表于 03-25 07:23

    數(shù)據(jù)標注服務—奠定大模型訓練數(shù)據(jù)基石

    數(shù)據(jù)標注是大模型訓練過程中不可或缺的基礎(chǔ)環(huán)節(jié),其質(zhì)量直接影響著模型的性能表現(xiàn)。在大模型訓練中,
    的頭像 發(fā)表于 03-21 10:30 ?1862次閱讀

    標貝數(shù)據(jù)標注服務:奠定大模型訓練數(shù)據(jù)基石

    數(shù)據(jù)標注是大模型訓練過程中不可或缺的基礎(chǔ)環(huán)節(jié),其質(zhì)量直接影響著模型的性能表現(xiàn)。在大模型訓練中,
    的頭像 發(fā)表于 03-21 10:27 ?710次閱讀
    標貝<b class='flag-5'>數(shù)據(jù)</b>標注服務:奠定大<b class='flag-5'>模型</b><b class='flag-5'>訓練</b>的<b class='flag-5'>數(shù)據(jù)</b>基石

    是否可以輸入隨機數(shù)據(jù)集來生成INT8訓練后量化模型?

    無法確定是否可以輸入隨機數(shù)據(jù)集來生成 INT8 訓練后量化模型
    發(fā)表于 03-06 06:45

    模型訓練:開源數(shù)據(jù)與算法的機遇與挑戰(zhàn)分析

    進行多方位的總結(jié)和梳理。 在第二章《TOP 101-2024 大模型觀點》中,蘇州盛派網(wǎng)絡(luò)科技有限公司創(chuàng)始人兼首席架構(gòu)師蘇震巍分析了大模型訓練過程中開源數(shù)據(jù)集和算法的重要性和影響,分析
    的頭像 發(fā)表于 02-20 10:40 ?841次閱讀
    大<b class='flag-5'>模型</b><b class='flag-5'>訓練</b>:開源<b class='flag-5'>數(shù)據(jù)</b>與算法的機遇與挑戰(zhàn)分析

    用PaddleNLP在4060單卡上實踐大模型訓練技術(shù)

    手把手教您如何在單張消費級顯卡上,利用PaddleNLP實踐OpenAI的GPT-2模型的預訓練。GPT-2的預訓練關(guān)鍵技術(shù)與流程與GPT-4等大參數(shù)
    的頭像 發(fā)表于 02-19 16:10 ?1733次閱讀
    用PaddleNLP在4060單卡上實踐大<b class='flag-5'>模型</b>預<b class='flag-5'>訓練</b>技術(shù)

    如何訓練BP神經(jīng)網(wǎng)絡(luò)模型

    BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是一種經(jīng)典的人工神經(jīng)網(wǎng)絡(luò)模型,其訓練過程主要分為兩個階段:前向傳播和反向傳播。以下是訓練BP神經(jīng)網(wǎng)絡(luò)模型的步驟: 一、前向傳播 前向傳播
    的頭像 發(fā)表于 02-12 15:10 ?1215次閱讀

    騰訊公布大語言模型訓練新專利

    大語言模型訓練過程中引入第一摘要文本和第二摘要文本,為模型提供了更為豐富的學習信息。這兩個摘要文本在信息量上存在差異,且第一摘要文本中既包含正確語句也包含錯誤語句。這一設(shè)計使得
    的頭像 發(fā)表于 02-10 09:37 ?594次閱讀

    GPU是如何訓練AI大模型

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

    AI模型部署邊緣設(shè)備的奇妙之旅:目標檢測模型

    意味著它可以在訓練過程中根據(jù)數(shù)據(jù)自動調(diào)整。這種靈活性使得PReLU能夠更好地適應不同任務的需求。 公式: 其中 ?? 是針對每個神經(jīng)元或共享所有神經(jīng)元的學習參數(shù),用于控制負區(qū)間的斜率。 優(yōu)點 自適應學習
    發(fā)表于 12-19 14:33

    AI大模型訓練數(shù)據(jù)來源分析

    AI大模型訓練數(shù)據(jù)來源廣泛且多元化,這些數(shù)據(jù)源對于構(gòu)建和優(yōu)化AI模型至關(guān)重要。以下是對AI大模型
    的頭像 發(fā)表于 10-23 15:32 ?5326次閱讀

    如何訓練ai大模型

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