91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

YCqV_FPGA_EETre ? 來源:XILINX開發(fā)者社區(qū) ? 作者:賽靈思開發(fā)者 ? 2021-08-25 15:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇是利用 Python 和 PyTorch 處理面向對象的數據集系列博客的第 2 篇。

如需閱讀第 1 篇:原始數據和數據集,請參閱此處。

我們在第 1 部分中已定義 MyDataset 類,現在,讓我們來例化 MyDataset 對象

此可迭代對象是與原始數據交互的接口,在整個訓練過程中都有巨大作用。

第 2 部分:創(chuàng)建數據集對象

■輸入 [9]:

mydataset = MyDataset(isValSet_bool = None, raw_data_path = raw_data_path, norm = False, resize = True, newsize = (64, 64))

以下是該對象的一些使用示例:

■輸入 [10]:

# 對象操作示例。

# 此操作用于調用 method __getitem__ 并從第 6 個樣本獲取標簽

mydataset[6][1]

■輸出 [10]:

0

■輸入 [11]:

# 此操作用于在類聲明后打印注釋

MyDataset.__doc__

■輸出 [11]:

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

■輸入 [12]:

# 此操作用于調用 method __len__

len(mydataset)

■輸出 [12]:

49100

■輸入 [13]:

# 此操作用于觸發(fā) method __str__

print(mydataset)

原始數據路徑為 。/raw_data/data_images/《raw samples》

可迭代對象的重要性

訓練期間,將向模型提供多批次樣本。可迭代的 mydataset 是獲得高級輕量代碼的關鍵。

以下提供了可迭代對象的 2 個使用示例。

示例 1:

我們可以直接獲取第 3 個樣本張量:

■輸入 [14]:

mydataset.__getitem__(3)[0].shape

■輸出 [14]:

torch.Size([3, 64, 64])

與以下操作作用相同

■輸入 [15]:

mydataset[3][0].shape

■輸出 [15]:

torch.Size([3, 64, 64])

示例 2:

我們可以對文件夾中的圖像進行解析,并移除黑白圖像:

■輸入 [ ]:

# 數據集訪問示例:創(chuàng)建 1 個包含標簽的新文件,移除黑白圖像

if os.path.exists(raw_data_path + ‘/’+ “l(fā)abels_new.txt”):

os.remove(raw_data_path + ‘/’+ “l(fā)abels_new.txt”)

with open(raw_data_path + ‘/’+ “l(fā)abels_new.txt”, “a”) as myfile:

for item, info in mydataset:

if item != None:

if item.shape[0]==1:

# os.remove(raw_data_path + ‘/’ + info.SampleName)

print(‘C = {}; H = {}; W = {}; info = {}’.format(item.shape[0], item.shape[1], item.shape[2], info))

else:

#print(info.SampleName + ‘ ’ + str(info.SampleLabel))

myfile.write(info.SampleName + ‘ ’ + str(info.SampleLabel) + ‘ ’)

■輸入 [ ]:

# 查找具有非期望格式的樣本

with open(raw_data_path + ‘/’+ “l(fā)abels.txt”, “a”) as myfile:

for item, info in mydataset:

if item != None:

if item.shape[0]!=3:

# os.remove(raw_data_path + ‘/’ + info.SampleName)

print(‘C = {}; H = {}; W = {}; info = {}’.format(item.shape[0], item.shape[1], item.shape[2], info))

修改標簽文件后,請務必更新緩存:

■輸入 [ ]:

if os.path.exists(raw_data_path + ‘/’+ “l(fā)abels_new.txt”):

os.rename(raw_data_path + ‘/’+ “l(fā)abels.txt”, raw_data_path + ‘/’+ “l(fā)abels_orig.txt”)

os.rename(raw_data_path + ‘/’+ “l(fā)abels_new.txt”, raw_data_path + ‘/’+ “l(fā)abels.txt”)

@functools.lru_cache(1)

def getSampleInfoList(raw_data_path):

sample_list = []

with open(str(raw_data_path) + ‘/labels.txt’, “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)

return sample_list

del mydataset

mydataset = MyDataset(isValSet_bool = None, raw_data_path = ‘。./。./raw_data/data_images’, norm = False)

len(mydataset)

您可通過以下鏈接閱讀了解有關 PyTorch 中的可迭代數據庫的更多信息:

https://pytorch.org/docs/stable/data.html

歸一化

應對所有樣本張量計算平均值和標準差。

如果數據集較小,可以嘗試在內存中對其進行直接操作:使用 torch.stack 即可創(chuàng)建 1 個包含所有樣本張量的棧。

可迭代對象 mydataset 支持簡潔精美的代碼。

使用“view”即可保留 R、G 和 B 這 3 個通道,并將其余所有維度合并為 1 個維度。

使用“mean”即可計算維度 1 的每個通道的平均值。

請參閱附件中有關 dim 使用的說明。

■輸入 [16]:

imgs = torch.stack([img_t for img_t, _ in mydataset], dim = 3)

■輸入 [17]:

#im_mean = imgs.view(3, -1).mean(dim=1).tolist()

im_mean = imgs.view(3, -1).mean(dim=1)

im_mean

■輸出 [17]:

tensor([0.4735, 0.4502, 0.4002])

■輸入 [18]:

im_std = imgs.view(3, -1).std(dim=1).tolist()

im_std

■輸出 [18]:

[0.28131285309791565, 0.27447444200515747, 0.2874436378479004]

■輸入 [19]:

normalize = transforms.Normalize(mean=[0.4735, 0.4502, 0.4002], std=[0.28131, 0.27447, 0.28744])

# free memory

del imgs

下面,我們將再次構建數據集對象,但這次將對此對象進行歸一化:

■輸入 [21]:

mydataset = MyDataset(isValSet_bool = None, raw_data_path = raw_data_path, norm = True, resize = True, newsize = (64, 64))

由于采用了歸一化,因此張量值被轉換至范圍 0..1 之內,并進行剪切操作。

■輸入 [22]:

original = Image.open(‘。./。./raw_data/data_images/img_00009111.JPEG’)

fig, axs = plt.subplots(1, 2, figsize=(10, 3))

axs[0].set_title(‘clipped tensor’)

axs[0].imshow(mydataset[5][0].permute(1,2,0))

axs[1].set_title(‘original PIL image’)

axs[1].imshow(original)

plt.show()

將輸入數據剪切到含 RGB 數據的 imshow 的有效范圍內,以 [0..1] 表示浮點值,或者以 [0..255] 表示整數值。

使用 torchvision.transforms

進行預處理

現在,我們已經創(chuàng)建了自己的變換函數或對象(原本用作為加速學習曲線的練習),我建議使用 Torch 模塊 torchvision.transforms:

“此模塊定義了一組可組合式類函數對象,這些對象可作為實參傳遞到數據集(如 torchvision.CIFAR10),并在加載數據后 __getitem__ 返回數據之前,對數據執(zhí)行變換”。

以下列出了可能的變換:

■輸入 [23]:

from torchvision import transforms

dir(transforms)

■輸出 [23]:

[‘CenterCrop’,

‘ColorJitter’,

‘Compose’,

‘FiveCrop’,

‘Grayscale’,

‘Lambda’,

LinearTransformation’,

‘Normalize’,

‘Pad’,

‘RandomAffine’,

‘RandomApply’,

‘RandomChoice’,

‘RandomCrop’,

‘RandomErasing’,

‘RandomGrayscale’,

‘RandomHorizontalFlip’,

‘RandomOrder’,

‘RandomPerspective’,

‘RandomResizedCrop’,

‘RandomRotation’,

‘RandomSizedCrop’,

‘RandomVerticalFlip’,

‘Resize’,

‘Scale’,

‘TenCrop’,

‘ToPILImage’,

‘ToTensor’,

‘__builtins__’,

‘__cached__’,

‘__doc__’,

‘__file__’,

‘__loader__’,

‘__name__’,

‘__package__’,

‘__path__’,

‘__spec__’,

‘functional’,

‘transforms’]

在此示例中,我們使用變換來執(zhí)行了以下操作:

1) ToTensor - 從 PIL 圖像轉換為張量,并將輸出格式定義為 CxHxW

2) Normalize - 將張量歸一化

責任編輯:haq

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

    關注

    8

    文章

    7335

    瀏覽量

    94801
  • python
    +關注

    關注

    57

    文章

    4877

    瀏覽量

    90077
  • pytorch
    +關注

    關注

    2

    文章

    813

    瀏覽量

    14856

原文標題:開發(fā)者分享 | 利用 Python 和 PyTorch 處理面向對象的數據集 - 2:創(chuàng)建數據集對象

文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發(fā)圈】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PyTorch 中RuntimeError分析

    ? 錯誤原因 這個 RuntimeError 是因為在 PyTorch 中,upsample_nearest2d_out_frame(最近鄰2D上采樣)操作尚未對 BFloat16 數據類型提供
    發(fā)表于 03-06 06:02

    1688 商品詳情 API 調用與數據解析 Python 實戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調用與數據解析實戰(zhàn)方案,核心是完成 API 憑證配置、接口請求(含簽名)、響應數據解析、異常處理 的全流程落地,我會提供可直接
    的頭像 發(fā)表于 02-10 11:23 ?273次閱讀

    Pytorch 與 Visionfive2 兼容嗎?

    Pytorch 與 Visionfive2 兼容嗎? $ pip3 install torch torchvision torchaudio --index-url https
    發(fā)表于 02-06 08:28

    如何使用Python讀取不間斷數據,并將其傳輸到LabVIEW進行處理?

    使用Python讀取Count,如何將讀取到的數據傳輸至Labview;傳輸過程中Python要保持讀取的動作,不能停止。
    發(fā)表于 01-23 11:09

    C語言和C++之間的區(qū)別是什么

    (inheritance)、多態(tài)(polymorphism)等面向對象編程概念。程序員可以通過定義類來創(chuàng)建對象,并利用類的實例進行操作。 2、類型系統與安全性: C++具有更為嚴格
    發(fā)表于 12-11 06:23

    PYQT 應用程序框架及開發(fā)工具

    大家好,本團隊此次分享的內容為開發(fā)過程中使用到的PYQT 應用程序框架及開發(fā)工具。 pYqt 是一個多平臺的 python 圖形用戶界面應用程序框架,由于其面向對象、 易擴展(可實現組件編程等
    發(fā)表于 10-29 07:15

    基于蜂鳥E203架構的指令K擴展

    擴展指令架構(RISC-V ISA)的K擴展。 K擴展是一種可選的指令擴展,它增加了一些向量和矩陣操作的指令。這些指令可以利用硬件并行性,高效地處理大量
    發(fā)表于 10-21 09:38

    AI Cube如何導入數據?

    我從在線平臺標注完并且下載了數據,也按照ai cube的要求修改了文件夾名稱,但是導入提示 不知道是什么原因,我該怎么辦? 以下是我修改后的文件夾目錄
    發(fā)表于 08-11 08:12

    云訓練平臺數據過大無法下載數據至本地怎么解決?

    起因是現在平臺限制了圖片數量,想要本地訓練下載數據時發(fā)現只會跳出網絡異常的錯誤,請問這有什么解決辦法?
    發(fā)表于 07-22 06:03

    使用AICube導入數據點創(chuàng)建后提示數據不合法怎么處理?

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

    數據下載失敗的原因?

    數據下載失敗什么原因太大了嗎,小的可以下載,想把大的下載去本地訓練報錯網絡錯誤 大的數據多大?數據量有多少?
    發(fā)表于 06-18 07:04

    跟老齊學Python:從入門到精通

    本帖最后由 yuu_cool 于 2025-6-3 16:52 編輯 本資料是面向編程零基礎讀者的Python 入門教程,內容涵蓋了Python 的基礎知識和初步應用。以比較輕快的風格,向零基
    發(fā)表于 06-03 16:10

    摩爾線程發(fā)布Torch-MUSA v2.0.0版本 支持原生FP8和PyTorch 2.5.0

    , 支持原生FP8數據類型,支持PyTorch 2.5.0 ,并通過多項針對MUSA計算平臺的性能優(yōu)化,進一步提升了對AI模型和大規(guī)模數據處理的支持能力。 FP8原生支持,國產GPU的技術突破 作為
    的頭像 發(fā)表于 05-11 16:41 ?1735次閱讀

    python入門圣經-高清電子書(建議下載)

    和Pygal 等強大的Python 庫和工具介紹,以及列表、字典、if 語句、類、文件與異常、代碼測試等內容; 第二部分將理論付諸實踐,講解如何開發(fā)三個項目,包括簡單的Python 2D 游戲開發(fā)如何利用
    發(fā)表于 04-10 16:53

    請問NanoEdge AI數據該如何構建?

    我想用NanoEdge來識別異常的聲音,但我目前沒有辦法生成模型,我感覺可能是數據的問題,請問我該怎么構建數據?或者生成模型失敗還會有哪些原因?
    發(fā)表于 03-10 08:20