那曲檬骨新材料有限公司

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

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

3天內不再提示

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

YCqV_FPGA_EETre ? 來源:XILINX開發者社區 ? 作者:賽靈思開發者 ? 2021-08-25 15:30 ? 次閱讀

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

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

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

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

第 2 部分:創建數據集對象

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

# 此操作用于觸發 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:

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

■輸入 [ ]:

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

if os.path.exists(raw_data_path + ‘/’+ “labels_new.txt”):

os.remove(raw_data_path + ‘/’+ “labels_new.txt”)

with open(raw_data_path + ‘/’+ “labels_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 + ‘/’+ “labels.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 + ‘/’+ “labels_new.txt”):

os.rename(raw_data_path + ‘/’+ “labels.txt”, raw_data_path + ‘/’+ “labels_orig.txt”)

os.rename(raw_data_path + ‘/’+ “labels_new.txt”, raw_data_path + ‘/’+ “labels.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 即可創建 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

進行預處理

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

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

以下列出了可能的變換:

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

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

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

2) Normalize - 將張量歸一化

責任編輯:haq

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

    關注

    8

    文章

    7141

    瀏覽量

    89581
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85039
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13361

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

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

收藏 人收藏

    評論

    相關推薦

    利用Arm Kleidi技術實現PyTorch優化

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

    PyTorch 數據加載與處理方法

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

    如何在 PyTorch 中訓練模型

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

    pycharm配置pytorch運行環境

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

    pytorch怎么在pycharm中運行

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

    pycharm如何調用pytorch

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

    pytorch環境搭建詳細步驟

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

    pytorchpython的關系是什么

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

    Python建模算法與應用

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

    pytorch如何訓練自己的數據

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

    PyTorch的介紹與使用案例

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

    PyTorch的特性和使用方法

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

    PyTorch如何訓練自己的數據

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

    如何使用PyTorch建立網絡模型

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

    PyTorch與PyCharm的區別

    在深入探討PyTorch與PyCharm的區別時,我們首先需要明確兩者在計算機科學和數據科學領域中的不同定位和功能。PyTorch是一個開源的深度學習庫,而PyCharm則是一款功能強大
    的頭像 發表于 07-02 12:36 ?3444次閱讀
    桐城太阳城招聘| 马牌娱乐城| 百家乐模拟游戏下载| 百家乐官网视频下栽| 吉林市| 澳门百家乐官网牌规| 百家乐官网玩法教学视频| 百家乐官网增值公式| 百家乐官网投注平台信誉排行| 网上百家乐官网可靠| 澳门百家乐官网赢钱秘诀| 百家乐官网云顶| 免费玩百家乐官网的玩法技巧和规则 | 做生意门朝哪个方向好| 百家乐怎么赢博彩正网| 至尊百家乐2014| 百家乐官网网站| 大发888游戏平台稳定大发888| 博盈百家乐官网游戏| 网上百家乐官网公| 诚信百家乐平台| tt娱乐城开户| BB百家乐官网大转轮| 赌场百家乐攻略| 澳门网上博彩| 最好的百家乐官网好评平台都有哪些| 缅甸百家乐官网博彩| 汽车| 宾利百家乐现金网| 博彩业| 狮威百家乐官网娱乐网| 百家乐奥| 桂林市| VIP百家乐-挤牌卡安桌板| 明升投注网 | 澳门百家乐官网游戏玩法| 大发888娱乐场 ylc8| 新世纪百家乐官网娱乐城| 澳门百家乐论| 太阳城百家乐官网作弊| G3百家乐的玩法技巧和规则|