国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理

這篇具有很好參考價(jià)值的文章主要介紹了【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

作者????♂?:讓機(jī)器理解語(yǔ)言か

專(zhuān)欄??:PyTorch

描述??:PyTorch 是一個(gè)基于 Torch 的 Python 開(kāi)源機(jī)器學(xué)習(xí)庫(kù)。

寄語(yǔ)??:??沒(méi)有白走的路,每一步都算數(shù)!???

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理?

介紹??

??torchvision.transforms?是一個(gè)包含了常用的圖像變化方法的工具包,該工具包主要用于圖像預(yù)處理、數(shù)據(jù)增強(qiáng)等工作之中。本實(shí)驗(yàn),將詳細(xì)介紹?torchvision.transforms?中常用的數(shù)據(jù)處理函數(shù)。

知識(shí)點(diǎn)??

  • ??預(yù)處理的批操作:將預(yù)處理操作打包? →? 預(yù)處理集合器
  • ??葡萄酒數(shù)據(jù)的預(yù)處理
  • ??圖像數(shù)據(jù)的預(yù)處理

數(shù)據(jù)的預(yù)處理??

Compose

????????首先讓我們先來(lái)學(xué)習(xí)?torchvision.transforms.Compose(),它的參數(shù)是一個(gè)由多個(gè) transforms 包中的方法組成的列表。簡(jiǎn)單的說(shuō),該函數(shù)的主要目的就是將所有的預(yù)處理操作進(jìn)行打包,當(dāng)有數(shù)據(jù)來(lái)時(shí),我們只需要將數(shù)據(jù)傳入該函數(shù)中,就能一次性對(duì)數(shù)據(jù)進(jìn)行所有的預(yù)處理操作。如下:

import torch
import torchvision


class ToTensor:
    # 定義一個(gè)將原數(shù)據(jù)轉(zhuǎn)為 Torch 的操作
    def __call__(self, X):
        return torch.from_numpy(X)


class MulTransform:
    # 定義一個(gè)將所有數(shù)據(jù)翻倍的預(yù)處理操作
    def __call__(self, X):
        X *= 2
        return X


# 定義預(yù)處理集合器
composed = torchvision.transforms.Compose([ToTensor(), MulTransform()])
composed

"""
Compose(
    <__main__.ToTensor object at 0x7fa24c2c6450>
    <__main__.MulTransform object at 0x7fa24bbfdf90>
)
"""

????????上面我們定義了一個(gè)預(yù)處理的集合器,我們只需要將數(shù)據(jù)傳入?composed?中,PyTorch 就會(huì)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行?ToTensor()?和?MulTransform()?操作。如下:

import numpy as np
data = np.array([1, 2, 3])
composed(data)
# tensor([2, 4, 6])

????????從結(jié)果可以看出,盡管我們的數(shù)據(jù)需要進(jìn)行很多次預(yù)處理,但是我們只需要將這些預(yù)處理全部放入?Compose?中進(jìn)行打包,就能形成一個(gè)數(shù)據(jù)預(yù)處理集合。當(dāng)我們需要處理某些數(shù)據(jù)時(shí),只需要簡(jiǎn)單的將數(shù)據(jù)傳入這個(gè)集合即可。

????????接下來(lái),我們以葡萄酒的數(shù)據(jù)預(yù)處理為例,修改上一個(gè)試驗(yàn)中的?WineDataset?類(lèi),使其能夠輸出歸一化后的 Tensor 數(shù)據(jù)集。

葡萄酒數(shù)據(jù)的預(yù)處理??

首先,還是讓我們先來(lái)定義數(shù)據(jù)集合:

from torch.utils.data import Dataset
import pandas as pd


class WineDataset(Dataset):
    # 建立一個(gè)數(shù)據(jù)集合繼承  Dataset 即可
    def __init__(self, transform):
        # I初始化數(shù)據(jù)
        # 以pandas的形式讀入數(shù)據(jù)
        xy = pd.read_csv(
            "https://labfile.oss.aliyuncs.com/courses/2316/wine.csv", header=None)
        self.n_samples = xy.shape[0]

        # 這里我們就不做Tensor的轉(zhuǎn)換了,將其全部放入 transform 中
        self.x_data = xy.values[:, 1:]
        self.y_data = xy.values[:, 0].reshape(-1,1) # 轉(zhuǎn)為二維向量,和x匹配
        # 數(shù)據(jù)預(yù)處理集合
        self.transform = transform

    # 返回 dataset[index]
    def __getitem__(self, index):
        sample = self.x_data[index], self.y_data[index]

        if self.transform:
            sample = self.transform(sample)

        return sample
    # 返回?cái)?shù)據(jù)長(zhǎng)度

    def __len__(self):
        return self.n_samples

????????可以看出?WineDataset?類(lèi)中的代碼和上一個(gè)試驗(yàn)大致相同,我們只是多加了一個(gè) transform 變量,即數(shù)據(jù)預(yù)處理操作的集合。該變量并沒(méi)有在?WineDataset?類(lèi) 中被定義,只是作為一個(gè)參數(shù)被傳入。

????????這樣做有一個(gè)好處就是,當(dāng)我們需要在原來(lái)的基礎(chǔ)上添加新的預(yù)處理操作時(shí),我們只需要在模型外重新定義 transform 變量即可,無(wú)需修改原來(lái)類(lèi)中的代碼。

????????接下來(lái),就讓我們來(lái)定義預(yù)處理操作了。首先,讓我們來(lái)定義數(shù)據(jù)的歸一化操作,這里使用最大最小歸一化:

class Normalization:
    def __call__(self, sample):
        inputs, targets = sample
        amin, amax = inputs.min(), inputs.max()  # 求最大最小值
        inputs = (inputs-amin)/(amax-amin)  # (矩陣元素-最小值)/(最大值-最小值)
        return inputs, targets


# 測(cè)試代碼
a = 10*np.random.random((5, 5))
# 測(cè)試數(shù)據(jù) 前4列表示特征,最后一列表示標(biāo)簽
data = [a[:, 0:4], a[:, 4]]
Normalization()(data)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理???

????????接下來(lái),讓我們來(lái)定義數(shù)據(jù)的轉(zhuǎn)化操作,即將原數(shù)據(jù)類(lèi)型轉(zhuǎn)為 Tensor :

class ToTensor:
    def __call__(self, sample):
        inputs, targets = sample
        return torch.from_numpy(inputs), torch.from_numpy(targets)


# 測(cè)試代碼
a = 10*np.random.random((5, 5))
# 測(cè)試數(shù)據(jù) 前4列表示特征,最后一列表示標(biāo)簽
data = [a[:, 0:4], a[:, 4]]
ToTensor()(data)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??? ? ? ? 最后,讓我們使用這兩個(gè)預(yù)處理操作,來(lái)處理葡萄酒數(shù)據(jù)。

????????我們無(wú)需修改上面代碼,只需將其封裝到?Compose?中,再傳入即可。

# 定義 composed
composed = torchvision.transforms.Compose([Normalization(), ToTensor()])
# 傳入該參數(shù),即可獲得一系列預(yù)處理之后的數(shù)據(jù)
dataset = WineDataset(transform=composed)
first_data = dataset[0]
features, labels = first_data
# 輸出類(lèi)型觀察數(shù)據(jù)是否發(fā)生改變
print(type(features), type(labels))
# 輸出內(nèi)容觀察數(shù)據(jù)是否進(jìn)行了歸一
print(features, labels)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??????????如上,我們使用了自定義的預(yù)處理方法,完成了 PyTorch 類(lèi)型的數(shù)據(jù)集的預(yù)處理。當(dāng)然,除了自定義的預(yù)處理方法外,PyTorch 還為我們提供了很多封裝好的預(yù)處理操作

圖像的預(yù)處理??

??torchvision.transforms?中有很多關(guān)于圖像預(yù)處理的函數(shù)。接下來(lái),讓我們對(duì)一些常用的圖像處理函數(shù)進(jìn)行闡述。如果你需要查看所有的函數(shù),可以訪問(wèn)?官方網(wǎng)址。

為了能夠更好的闡述這些函數(shù),讓我們以一張圖片為例。首先,讓我們來(lái)加載這張圖片:

!wget -nc  "https://labfile.oss.aliyuncs.com/courses/2534/cat.jpg"
import torchvision.transforms as transforms
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow
%matplotlib inline
img = Image.open("cat.jpg")
imshow(img)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?????????從中心開(kāi)始,裁剪給定大小的 PIL 圖像:transforms.CenterCrop

# torchvision.transforms.CenterCrop(size):從中心開(kāi)始,裁剪給定大小的 PIL 圖像
transform = transforms.CenterCrop((64, 200))
new_img = transform(img)
imshow(new_img)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?????????改變圖片的亮度、對(duì)比度和飽和度:transforms.ColorJitter

# transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0):
# 改變圖片的亮度、對(duì)比度和飽和度
plt.subplot(221)
imshow(img)
# r隨機(jī)改變亮度
my_img1 = transforms.ColorJitter((0.5, 0.6))(img)
plt.subplot(222)
imshow(my_img1)
# 隨機(jī)改變對(duì)比度
my_img2 = transforms.ColorJitter(0, (0.5, 0.6))(img)
plt.subplot(223)
imshow(my_img2)
# 隨機(jī)改變飽和度
my_img3 = transforms.ColorJitter(0, 0, (0.5, 0.6))(img)
plt.subplot(224)
imshow(my_img3)
plt.show()

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?將圖像轉(zhuǎn)為灰度圖像:torchvision.transforms.Grayscale(num_output_channels )。

  • 如果返回的圖像是單通道 num_output_channels = 1。
  • 如果返回的圖像是 3 通道,其中 num_output_channels = 3。
plt.subplot(1, 3, 1)
imshow(img)
my_img1 = transforms.Grayscale(1)(img)
plt.subplot(132)
imshow(my_img1, 'gray')
my_img2 = transforms.Grayscale(3)(img)
plt.subplot(133)
imshow(my_img2)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?????????使用給定的 pad 值將給定的 PIL 圖像四處填充:ransforms.Pad(padding,fill,padding_mode)

# transforms.Pad(padding,fill = 0,padding_mode ='constant' ):
# 使用給定的 pad 值將給定的 PIL 圖像四處填充
plt.subplot(121)
imshow(img)
# 四周加邊界
my_img = transforms.Pad(padding=20, fill=(0, 255, 255),
                        padding_mode='constant')(img)
plt.subplot(122).set_title("Pad")
imshow(my_img)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?????????保持圖像中心不變的中心仿射變換(可以理解為不同程度的旋轉(zhuǎn),再在空余位置補(bǔ) 0):transforms.RandomAffine (degrees, translate, scale, shear, resample, fillcolor)。

# transforms.RandomAffine(degrees, translate=None, scale=None,
#                       shear=None, resample=False, fillcolor=0):
# 保持圖像中心不變的中心仿射變換(可以理解為不同程度的旋轉(zhuǎn),再在空余位置補(bǔ) 0)
my_img1 = transforms.RandomAffine(60)(img)
plt.subplot(221).set_title("rotate_only")
imshow(my_img1)
my_img2 = transforms.RandomAffine(60, translate=(0.3, 0.3))(img)
plt.subplot(222).set_title("rotate_translate")
imshow(my_img2)
my_img3 = transforms.RandomAffine(60, scale=(2.0, 2.1))(img)
plt.subplot(223).set_title("rotate_scale")
imshow(my_img3)
my_img4 = transforms.RandomAffine(0, shear=60)(img)
plt.subplot(224).set_title("shear_only")
imshow(my_img4)
plt.tight_layout()

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?????????將原圖像進(jìn)行隨機(jī)裁剪、裁剪后重新放縮到 size 大?。?span style="color:#fe2c24;">torchvision.transforms.RandomResizedCrop(size, scale,ratio,interpolation)。

#torchvision.transforms.RandomResizedCrop(size, scale,ratio,interpolation)
new_img = transforms.RandomResizedCrop((128, 126), scale=(0.08, 1.0),
                                       ratio=(0.75, 1.333333333), interpolation=2)(img)
imshow(new_img)

【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理??

?????????當(dāng)然除了上面這些相關(guān)圖像的處理外,torchvision.transforms?中還有很多圖像處理的函數(shù),你可以按照上面代碼的思路對(duì)其他函數(shù)進(jìn)行檢驗(yàn)。官方 API?請(qǐng)點(diǎn)擊這里。

實(shí)驗(yàn)總結(jié)??

????????本實(shí)驗(yàn)詳細(xì)的闡述了?torchvision.transforms?的使用方法和?torchvision.transforms?中內(nèi)置的圖像處理函數(shù)。這些預(yù)處理操作時(shí)非常重要的,一系列好的數(shù)據(jù)預(yù)處理操作,可以大大的加快模型的收斂速度,提高模型的準(zhǔn)確率和魯棒性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-422228.html

到了這里,關(guān)于【PyTorch】第八節(jié):數(shù)據(jù)的預(yù)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • <2>【深度學(xué)習(xí) × PyTorch】pandas | 數(shù)據(jù)預(yù)處理 | 處理缺失值:插值法 | networkx模塊繪制知識(shí)圖譜 | 線性代數(shù)初步

    ? 你永遠(yuǎn)不可能真正的去了解一個(gè)人,除非你穿過(guò)ta的鞋子,走過(guò)ta走過(guò)的路,站在ta的角度思考問(wèn)題,可當(dāng)你真正走過(guò)ta走過(guò)的路時(shí),你連路過(guò)都會(huì)覺(jué)得難過(guò)。有時(shí)候你所看到的,并非事實(shí)真相,你了解的,不過(guò)是浮在水面上的冰山一角?!稓⑺酪恢恢B(niǎo)》 ? ??

    2024年02月01日
    瀏覽(32)
  • 【3D 圖像分割】基于 Pytorch 的 3D 圖像分割6(數(shù)據(jù)預(yù)處理之LIDC-IDRI 標(biāo)簽 xml 標(biāo)簽轉(zhuǎn)儲(chǔ)及標(biāo)記次數(shù)統(tǒng)計(jì) )

    【3D 圖像分割】基于 Pytorch 的 3D 圖像分割6(數(shù)據(jù)預(yù)處理之LIDC-IDRI 標(biāo)簽 xml 標(biāo)簽轉(zhuǎn)儲(chǔ)及標(biāo)記次數(shù)統(tǒng)計(jì) )

    由于之前嗶站作者整理的 LUNA16 數(shù)據(jù)處理方式過(guò)于的繁瑣,于是,本文就對(duì) LUNA16 數(shù)據(jù)做一個(gè)新的整理,最終得到的數(shù)據(jù)和形式是差不多的。但是,主要不同的是代碼邏輯比較的簡(jiǎn)單,便于理解。 對(duì)于 LUNA16 數(shù)據(jù)集的學(xué)習(xí),可以去參考這里:【3D 圖像分類(lèi)】基于 Pytorch 的 3D 立

    2024年02月04日
    瀏覽(25)
  • Pytorch學(xué)習(xí)筆記(3):圖像的預(yù)處理(transforms)

    Pytorch學(xué)習(xí)筆記(3):圖像的預(yù)處理(transforms)

    ? 目錄 ?一、torchvision:計(jì)算機(jī)視覺(jué)工具包 ?二、transforms的運(yùn)行機(jī)制 (1)torchvision.transforms:常用的圖像預(yù)處理方法 (2)transforms運(yùn)行原理? ?三、數(shù)據(jù)標(biāo)準(zhǔn)化 transforms.Normalize() 四、數(shù)據(jù)增強(qiáng) ?4.1 transforms—數(shù)據(jù)裁剪 (1)transforms.CentorCrop (2)transforms.RandomCrop (3)RandomResiz

    2023年04月13日
    瀏覽(31)
  • 使用 Monai 和 PyTorch 預(yù)處理 3D Volumes以進(jìn)行腫瘤分割

    使用 Monai 和 PyTorch 預(yù)處理 3D Volumes以進(jìn)行腫瘤分割

    針對(duì)在使用傳統(tǒng)圖像處理工具時(shí)可能遇到的困難,深度學(xué)習(xí)已成為醫(yī)療保健領(lǐng)域的主要解決方案。 因?yàn)獒t(yī)學(xué)圖像比標(biāo)準(zhǔn)圖像更難處理(高對(duì)比度、人體的廣泛變化……)深度學(xué)習(xí)用于分類(lèi)、對(duì)象檢測(cè),尤其是分割任務(wù)。 在分割方面,深度學(xué)習(xí)用于分割人體器官,如肝臟、肺

    2023年04月11日
    瀏覽(30)
  • 數(shù)據(jù)采集與預(yù)處理01: 項(xiàng)目1 數(shù)據(jù)采集與預(yù)處理準(zhǔn)備

    數(shù)據(jù)采集與預(yù)處理01: 項(xiàng)目1 數(shù)據(jù)采集與預(yù)處理準(zhǔn)備

    數(shù)據(jù)采集:足夠的數(shù)據(jù)量是企業(yè)大數(shù)據(jù)戰(zhàn)略建設(shè)的基礎(chǔ),因此數(shù)據(jù)采集成為大數(shù)據(jù)分析的前站。數(shù)據(jù)采集是大數(shù)據(jù)價(jià)值挖掘中重要的一環(huán),其后的分析挖掘都建立在數(shù)據(jù)采集的基礎(chǔ)上。大數(shù)據(jù)技術(shù)的意義確實(shí)不在于掌握規(guī)模龐大的數(shù)據(jù)信息,而在于對(duì)這些數(shù)據(jù)進(jìn)行智能處理,

    2024年01月25日
    瀏覽(27)
  • 數(shù)據(jù)預(yù)處理matlab matlab數(shù)據(jù)的獲取、預(yù)處理、統(tǒng)計(jì)、可視化、降維

    1.1 從Excel中獲取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步確定導(dǎo)入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 對(duì)象, 再用 opts.Name=Value 的格式逐個(gè)添加。 例3: 將導(dǎo)入信息存到變量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    瀏覽(55)
  • 大數(shù)據(jù)采集技術(shù)與預(yù)處理學(xué)習(xí)一:大數(shù)據(jù)概念、數(shù)據(jù)預(yù)處理、網(wǎng)絡(luò)數(shù)據(jù)采集

    大數(shù)據(jù)采集技術(shù)與預(yù)處理學(xué)習(xí)一:大數(shù)據(jù)概念、數(shù)據(jù)預(yù)處理、網(wǎng)絡(luò)數(shù)據(jù)采集

    目錄 大數(shù)據(jù)概念: 1.數(shù)據(jù)采集過(guò)程中會(huì)采集哪些類(lèi)型的數(shù)據(jù)? 2.非結(jié)構(gòu)化數(shù)據(jù)采集的特點(diǎn)是什么? 3.請(qǐng)闡述傳統(tǒng)的數(shù)據(jù)采集與大數(shù)據(jù)采集的區(qū)別? ???????????????4.大數(shù)據(jù)采集的數(shù)據(jù)源有哪些?針對(duì)不同的數(shù)據(jù)源,我們可以采用哪些不同的方法和工具? 數(shù)據(jù)

    2024年01月25日
    瀏覽(30)
  • 數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)規(guī)約

    數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)規(guī)約

    目錄 一、前言 二、PCA的主要參數(shù): 三、數(shù)據(jù)歸約任務(wù)1 四、數(shù)據(jù)規(guī)約任務(wù)2 PCA(Principal Component Analysis),即主成分分析方法,是一種使用最廣泛的數(shù)據(jù)降維算法。PCA的主要思想是將n維特征映射到k維上,這k維是全新的正交特征也被稱(chēng)為主成分,是在原有n維特征的基礎(chǔ)上重新構(gòu)

    2024年02月12日
    瀏覽(29)
  • 數(shù)據(jù)分析--數(shù)據(jù)預(yù)處理

    本文主要是個(gè)人的學(xué)習(xí)筆記總結(jié),數(shù)據(jù)預(yù)處理的基本思路和方法,包括一些方法的使用示例和參數(shù)解釋?zhuān)唧w的數(shù)據(jù)預(yù)處理案例case詳見(jiàn)其他文章。如有錯(cuò)誤之處還請(qǐng)指正! 目錄 數(shù)據(jù)的質(zhì)量評(píng)定 數(shù)據(jù)處理步驟 缺失值的處理 標(biāo)記缺失值 刪除 缺失值 填充 缺失值 重復(fù)值處理 異

    2024年02月04日
    瀏覽(28)
  • 數(shù)據(jù)清洗和預(yù)處理

    預(yù)計(jì)更新 一、 爬蟲(chóng)技術(shù)概述 1.1 什么是爬蟲(chóng)技術(shù) 1.2 爬蟲(chóng)技術(shù)的應(yīng)用領(lǐng)域 1.3 爬蟲(chóng)技術(shù)的工作原理 二、 網(wǎng)絡(luò)協(xié)議和HTTP協(xié)議 2.1 網(wǎng)絡(luò)協(xié)議概述 2.2 HTTP協(xié)議介紹 2.3 HTTP請(qǐng)求和響應(yīng) 三、 Python基礎(chǔ) 3.1 Python語(yǔ)言概述 3.2 Python的基本數(shù)據(jù)類(lèi)型 3.3 Python的流程控制語(yǔ)句 3.4 Python的函數(shù)和模

    2024年02月07日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包