色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

利用Python和PyTorch處理面向對象的數據集(1)

efwedfd ? 來源:efwedfd ? 作者:efwedfd ? 2022-08-02 08:03 ? 次閱讀

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

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

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]:

■ 輸入 [6]:

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

# im2.show()

plt.imshow(im2)

■ 輸出 [6]:

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

類 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 + ‘/’ + ‘’

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

審核編輯:郭婷

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

    關注

    66

    文章

    8425

    瀏覽量

    132776
  • python
    +關注

    關注

    56

    文章

    4800

    瀏覽量

    84821
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13256
收藏 人收藏

    評論

    相關推薦

    利用Arm Kleidi技術實現PyTorch優化

    PyTorch 是一個廣泛應用的開源機器學習 (ML) 庫。近年來,Arm 與合作伙伴通力協作,持續改進 PyTorch 的推理性能。本文將詳細介紹如何利用 Arm Kleidi 技術提升 Arm
    的頭像 發表于 12-23 09:19 ?207次閱讀
    <b class='flag-5'>利用</b>Arm Kleidi技術實現<b class='flag-5'>PyTorch</b>優化

    PyTorch 數據加載與處理方法

    PyTorch 是一個流行的開源機器學習庫,它提供了強大的工具來構建和訓練深度學習模型。在構建模型之前,一個重要的步驟是加載和處理數據1. Py
    的頭像 發表于 11-05 17:37 ?446次閱讀

    如何在 PyTorch 中訓練模型

    準備好數據PyTorch 提供了 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 兩個類來幫助我們加載和批量處理
    的頭像 發表于 11-05 17:36 ?360次閱讀

    pycharm配置pytorch運行環境

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

    pytorch怎么在pycharm中運行

    PyTorch。以下是安裝PyTorch的步驟: 打開終端或命令提示符。 根據你的系統和需求,選擇適當的安裝命令。例如,如果你使用的是Python 3.8和CUDA 10.2,可以使用以下命令: pip
    的頭像 發表于 08-01 16:22 ?1494次閱讀

    pycharm如何調用pytorch

    引言 PyTorch是一個開源的機器學習庫,廣泛用于計算機視覺、自然語言處理等領域。PyCharm是一個流行的Python集成開發環境(IDE),提供了代碼編輯、調試、測試等功能。將PyTor
    的頭像 發表于 08-01 15:41 ?654次閱讀

    pytorch環境搭建詳細步驟

    了conda、Python等180多個科學包及其依賴項,非常適合用于科學計算(數據科學、機器學習應用、大數據處理
    的頭像 發表于 08-01 15:38 ?888次閱讀

    pytorchpython的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而在深度學習領域
    的頭像 發表于 08-01 15:27 ?2090次閱讀

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得
    的頭像 發表于 07-24 10:41 ?595次閱讀

    pytorch如何訓練自己的數據

    本文將詳細介紹如何使用PyTorch框架來訓練自己的數據。我們將從數據準備、模型構建、訓練過程、評估和測試等方面進行講解。 環境搭建 首先,我們需要安裝PyTorch。可以通過訪問
    的頭像 發表于 07-11 10:04 ?559次閱讀

    PyTorch的介紹與使用案例

    PyTorch是一個基于Python的開源機器學習庫,它主要面向深度學習和科學計算領域。PyTorch由Meta Platforms(原Facebook)的人工智能研究團隊開發,并逐漸
    的頭像 發表于 07-10 14:19 ?420次閱讀

    PyTorch的特性和使用方法

    PyTorch是一個開源的Python機器學習庫,由Meta Platforms(前身為Facebook)的人工智能研究團隊開發,并于2017年1月正式推出。PyTorch基于Torc
    的頭像 發表于 07-02 14:27 ?583次閱讀

    PyTorch如何訓練自己的數據

    PyTorch是一個廣泛使用的深度學習框架,它以其靈活性、易用性和強大的動態圖特性而聞名。在訓練深度學習模型時,數據是不可或缺的組成部分。然而,很多時候,我們可能需要使用自己的數據
    的頭像 發表于 07-02 14:09 ?1826次閱讀

    如何使用PyTorch建立網絡模型

    PyTorch是一個基于Python的開源機器學習庫,因其易用性、靈活性和強大的動態圖特性,在深度學習領域得到了廣泛應用。本文將從PyTorch的基本概念、網絡模型構建、優化方法、實際應用等多個方面,深入探討使用
    的頭像 發表于 07-02 14:08 ?439次閱讀

    PyTorch與PyCharm的區別

    在深入探討PyTorch與PyCharm的區別時,我們首先需要明確兩者在計算機科學和數據科學領域中的不同定位和功能。PyTorch是一個開源的深度學習庫,而PyCharm則是一款功能強大
    的頭像 發表于 07-02 12:36 ?3221次閱讀
    主站蜘蛛池模板: 无码任你躁久久久久久老妇双奶| 淫品色影院| 十分钟在线观看免费视频高清WWW| 偷偷鲁青春草原视频分类| 亚洲色欲国产AV精品综合| 22eee在线播放成人免费视频| 戳女人屁股流水羞羞漫画| 国产午夜三级一区二区三| 久久亚洲高清观看| 日韩精品真人荷官无码| 亚洲蜜桃AV永久无码精品放毛片| 99er久久国产精品在线| 国产精品久久久久久人妻精品蜜桃 | 国产精品18久久久久久欧美| 精品一区二区三区四区五区六区| 欧美三级aaa| 亚洲精品国产精品精| 99久久国产露脸国语对白| 国产精品亚洲欧美| 免费视频网站嗯啊轻点| 亚洲AV天堂无码麻豆电影| 99人精品福利在线观看| 国产曰韩无码亚洲视频| 欧美三级aaa| 亚洲中文字幕在线第六区| 不良网站进入窗口软件下载免费 | 国产高清国内精品福利色噜噜| 久久综合九色| 卫生间被教官做好爽HH视频 | 无码一区二区在线欧洲| 91成品视频| 国内精品九九视频| 日日啪无需播放器| 0855福利| 国产中文在线观看| 情欲.美女高潮| 永久免费在线观看视频| 国产成人精品区在线观看| 男女又黄又刺激B片免费网站| 亚洲久久少妇中文字幕| 高h gl肉文|