99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

利用Python和PyTorch處理面向?qū)ο蟮臄?shù)據(jù)集(1)

efwedfd ? 來源:efwedfd ? 作者:efwedfd ? 2022-08-02 08:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

file_sample_1 label1

file_sample_2 label2

file_sample_3 label3

(。..)

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

此方法基于面向?qū)ο?a target="_blank">編程以及創(chuàng)建用于數(shù)據(jù)處理的 “類”。

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

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

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

構(gòu)建含標(biāo)準(zhǔn)屬性和方法的“數(shù)據(jù)集”對象的原因多種多樣。我認(rèn)為,代碼的精致要求就足以合理化這一選擇,但我理解這是品味的問題。可移植性、速度和代碼模塊化可能是最重要的原因。

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

? 類可提供繼承

? 繼承可提供復(fù)用

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

? 繼承支持多態(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

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

■輸入 [2]:

raw_data_path = ‘。/raw_data/data_images’

構(gòu)建模塊

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

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

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

內(nèi)存中緩存可提升性能,但如果標(biāo)簽文件發(fā)生更改,請務(wù)必更新緩存內(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 圖像,那么以下類很實(shí)用。

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

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

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

■ 輸入 [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 的實(shí)操示例:

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

■ 輸入 [6]:

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

# im2.show()

plt.imshow(im2)

■ 輸出 [6]:

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

類 MyDataset 主要提供了 2 個(gè)方法:

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

__getitem__ 可使對象變?yōu)榭傻愋?,并按張量格式返回請求的樣本(已完成預(yù)處理)。

__getitem__ 步驟:

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

2) 按樣本的原始格式對其進(jìn)行預(yù)處理。

3) 將樣本變換為張量。

4) 以張量格式對樣本進(jìn)行預(yù)處理。

此處添加的預(yù)處理僅作為示例。

此類可對張量進(jìn)行歸一化(求平均值和標(biāo)準(zhǔn)差),這有助于加速訓(xùn)練過程。

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

該類會(huì)返回包含兩個(gè)元素的列表:在位置 [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 + ‘/’ + ‘’

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

審核編輯:郭婷

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

    關(guān)注

    66

    文章

    8503

    瀏覽量

    134628
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86761
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    809

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    使用AICube導(dǎo)入數(shù)據(jù)點(diǎn)創(chuàng)建后提示數(shù)據(jù)不合法怎么處理?

    重現(xiàn)步驟 data目錄下 labels.txt只有英文 **錯(cuò)誤日志** 但是使用示例的數(shù)據(jù)可以完成訓(xùn)練并部署
    發(fā)表于 06-24 06:07

    使用Yolo-v3-TF運(yùn)行OpenVINO?對象檢測Python演示時(shí)的結(jié)果不準(zhǔn)確的原因?

    的模型與對象檢測 Python* Demo 配合使用時(shí)無法檢測對象python3 open_model_zoo/demos/object_detection_demo/
    發(fā)表于 03-06 06:31

    操作指南:pytorch云服務(wù)器怎么設(shè)置?

    設(shè)置PyTorch云服務(wù)器需選擇云平臺(tái),創(chuàng)建合適的GPU實(shí)例,安裝操作系統(tǒng)、Python及Anaconda,創(chuàng)建虛擬環(huán)境,根據(jù)CUDA版本安裝PyTorch,配置環(huán)境變量,最后驗(yàn)證安裝。過程中需考慮
    的頭像 發(fā)表于 02-08 10:33 ?358次閱讀

    HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)權(quán)限與基礎(chǔ)數(shù)據(jù)

    === AbilityConstant.LaunchReason.CONTINUATION) { // ... // 調(diào)用封裝好的分布式數(shù)據(jù)對象處理函數(shù) this.handleDistributedData(want
    發(fā)表于 12-24 09:40

    利用Arm Kleidi技術(shù)實(shí)現(xiàn)PyTorch優(yōu)化

    PyTorch 是一個(gè)廣泛應(yīng)用的開源機(jī)器學(xué)習(xí) (ML) 庫。近年來,Arm 與合作伙伴通力協(xié)作,持續(xù)改進(jìn) PyTorch 的推理性能。本文將詳細(xì)介紹如何利用 Arm Kleidi 技術(shù)提升 Arm
    的頭像 發(fā)表于 12-23 09:19 ?1059次閱讀
    <b class='flag-5'>利用</b>Arm Kleidi技術(shù)實(shí)現(xiàn)<b class='flag-5'>PyTorch</b>優(yōu)化

    PyTorch 2.5.1: Bugs修復(fù)版發(fā)布

    ,以提升用戶體驗(yàn)。 二,PyTorch 2.5.1 的主要修內(nèi)容 1,RPM 和 arm64 發(fā)行版支持: 2.5.1 版本修復(fù)了基于 RPM 的發(fā)行版和 arm64 發(fā)行版中的一些問題,這些修復(fù)使得
    的頭像 發(fā)表于 12-03 16:11 ?1622次閱讀
    <b class='flag-5'>PyTorch</b> 2.5.1: Bugs修復(fù)版發(fā)布

    PyTorch GPU 加速訓(xùn)練模型方法

    在深度學(xué)習(xí)領(lǐng)域,GPU加速訓(xùn)練模型已經(jīng)成為提高訓(xùn)練效率和縮短訓(xùn)練時(shí)間的重要手段。PyTorch作為一個(gè)流行的深度學(xué)習(xí)框架,提供了豐富的工具和方法來利用GPU進(jìn)行模型訓(xùn)練。 1. 了解GPU加速
    的頭像 發(fā)表于 11-05 17:43 ?1410次閱讀

    PyTorch 數(shù)據(jù)加載與處理方法

    PyTorch 是一個(gè)流行的開源機(jī)器學(xué)習(xí)庫,它提供了強(qiáng)大的工具來構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。在構(gòu)建模型之前,一個(gè)重要的步驟是加載和處理數(shù)據(jù)。 1. Py
    的頭像 發(fā)表于 11-05 17:37 ?937次閱讀

    如何在 PyTorch 中訓(xùn)練模型

    準(zhǔn)備好數(shù)據(jù)。PyTorch 提供了 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 兩個(gè)類來幫助我們加載和批量處理
    的頭像 發(fā)表于 11-05 17:36 ?931次閱讀

    pycharm配置pytorch運(yùn)行環(huán)境

    在PyCharm中配置PyTorch運(yùn)行環(huán)境主要包括安裝PyCharm、安裝Python(如果尚未安裝)、配置PyTorch環(huán)境以及驗(yàn)證安裝等步驟。以下是詳細(xì)的步驟說明: 一、安裝PyCharm
    的頭像 發(fā)表于 08-01 16:25 ?2439次閱讀

    pytorch怎么在pycharm中運(yùn)行

    PyTorch。以下是安裝PyTorch的步驟: 打開終端或命令提示符。 根據(jù)你的系統(tǒng)和需求,選擇適當(dāng)?shù)陌惭b命令。例如,如果你使用的是Python 3.8和CUDA 10.2,可以使用以下命令: pip
    的頭像 發(fā)表于 08-01 16:22 ?2550次閱讀

    pycharm如何調(diào)用pytorch

    引言 PyTorch是一個(gè)開源的機(jī)器學(xué)習(xí)庫,廣泛用于計(jì)算機(jī)視覺、自然語言處理等領(lǐng)域。PyCharm是一個(gè)流行的Python集成開發(fā)環(huán)境(IDE),提供了代碼編輯、調(diào)試、測試等功能。將PyTor
    的頭像 發(fā)表于 08-01 15:41 ?1225次閱讀

    pytorch環(huán)境搭建詳細(xì)步驟

    了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),非常適合用于科學(xué)計(jì)算(數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)應(yīng)用、大數(shù)據(jù)處理
    的頭像 發(fā)表于 08-01 15:38 ?1869次閱讀

    pytorchpython的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語言之一。Python的易學(xué)易用、豐富的庫和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?3284次閱讀

    Python建模算法與應(yīng)用

    Python作為一種功能強(qiáng)大、免費(fèi)、開源且面向對象的編程語言,在科學(xué)計(jì)算、數(shù)學(xué)建模、數(shù)據(jù)分析等領(lǐng)域展現(xiàn)出了卓越的性能。其簡潔的語法、對動(dòng)態(tài)輸入的支持以及解釋性語言的本質(zhì),使得
    的頭像 發(fā)表于 07-24 10:41 ?1268次閱讀