亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PyTorch?Dataset與DataLoader使用超詳細講解

 更新時間:2022年10月13日 14:09:20   作者:竹清蘭香  
用于處理數(shù)據(jù)樣本的代碼可能會變得凌亂且難以維護;理想情況下,我們希望數(shù)據(jù)集代碼與模型訓練代碼解耦,以獲得更好的可讀性和模塊化。PyTorch提供的torch.utils.data.DataLoader和torch.utils.data.Dataset允許你使用預下載的數(shù)據(jù)集或自己制作的數(shù)據(jù)

一、Dataset

Dataset 類提供一種方式去獲取數(shù)據(jù)及其標簽

主要有兩個目的:

  • 獲取每一個數(shù)據(jù)及其標簽
  • 獲取數(shù)據(jù)的總量大小

1. 在控制臺進行操作

Hymenoptera (膜翅目昆蟲)數(shù)據(jù)集下載地址:

鏈接: https://pan.baidu.com/s/1XKwXsAtE2yzZW2IsvBDpnw?pwd=8a5t

提取碼: 8a5t 

這是一個螞蟻蜜蜂二分類的數(shù)據(jù)集,通常數(shù)據(jù)集有以下三種組織形式(上面的數(shù)據(jù)集屬于第一種):

  • 不同的類別以文件夾的形式存在,文件夾中是該類別的圖片
  • 圖片與標簽分別存儲,圖片在一個文件夾下,label信息在另一個文件夾下
  • label直接寫在圖片名稱里

①獲取圖片的基本信息

在Pycharm 中,點擊下方的PythonConsole進入控制臺進行操作(通過控制臺可以看到變量的詳細信息)

首先加載圖片,逐行輸入下方代碼:

from PIL import Image
img_path = "./dataset/hymenoptera_data/train/ants/0013035.jpg"
img = Image.open(img_path)

此時我們就可以在右側看到相關變量的信息:

點擊img變量,可以查看圖片的詳細信息。通過控制臺執(zhí)行程序能夠直觀地獲取后續(xù)操作所需的數(shù)據(jù):

最后可以通過img.show()打開圖片查看:

②獲取文件的基本信息

同樣還是在控制臺逐行輸入以下代碼:

dir_path = "dataset/hymenoptera_data/train/ants"
import os
img_path_list = os.listdir(dir_path)
img_path_list[0]

我們就可以獲取到文件夾下的文件名稱,由于是使用控制臺,我們還可以在右側查看列表的詳細信息:

因此在控制臺操作是有很大的優(yōu)點的,我們可以在控制臺逐行執(zhí)行已經(jīng)編寫好的文件中的語句,通過查看右側變量的值來判斷程序?qū)懙氖欠裼袉栴}

2. 編寫一個繼承Dataset 的類加載數(shù)據(jù)

下面的代碼也可以在控制臺運行(可以多行復制粘貼)來檢驗程序是否有誤

①定義 MyData類

導入所需頭文件:

from torch.utils.data import Dataset
from PIL import Image
import os

定義MyData類:

  • __init__:初始化函數(shù)
  • __getitem__:返回指定下標的圖片和標簽
  • __len__:返回數(shù)據(jù)集的大小
class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        self.img_path = os.listdir(self.path)
    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
        img = Image.open(img_item_path)
        label = self.label_dir
        return img, label
    def __len__(self):
        return len(self.img_path)

其中os.path.join()可以實現(xiàn)多個路徑的合并且不出錯

②創(chuàng)建類的實例并調(diào)用

創(chuàng)建 MyData 類的實例:

if __name__ == "__main__":
    root_dir = "../dataset/hymenoptera_data/train"
    ants_label_dir = "ants"
    bees_label_dir = "bees"
    ants_dataset = MyData(root_dir, ants_label_dir)
    bees_dataset = MyData(root_dir, bees_label_dir)

調(diào)用類中寫好的函數(shù):

    img, label = ants_dataset.__getitem__(3)
    print(ants_dataset.__len__(), label)
    img.show()

同時我們也可以通過下面這種方式用已有的數(shù)據(jù)集來創(chuàng)造數(shù)據(jù)集:

train_dataset = ants_dataset + bees_dataset

二、DataLoader

  • DataLoader 類是為后面的網(wǎng)絡提供不同的數(shù)據(jù)形式
  • DataLoader 會根據(jù)batch_size的值對數(shù)據(jù)進行打包
  • 導入所需的包
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

加載數(shù)據(jù):

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

測試:

img, target = test_data[0]
print(img.shape)
print(target)

進行日志記錄,開始訓練:

writer = SummaryWriter("dataloader")
for epoch in range(2):
    step = 0
    for data in test_loader:
        imgs, targets = data
        print(imgs.shape)
        print(targets)
        writer.add_images("Epoch: {}".format(epoch), imgs, step)
        step = step + 1
writer.close()

到此這篇關于PyTorch Dataset與DataLoader使用超詳細講解的文章就介紹到這了,更多相關PyTorch Dataset與DataLoader內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Python OpenCV實現(xiàn)圖像的覆蓋

    基于Python OpenCV實現(xiàn)圖像的覆蓋

    本文將基于Python、OpenCV和Numpy實現(xiàn)圖像的覆蓋,即小圖像覆蓋在大圖像上。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-02-02
  • python編寫彈球游戲的實現(xiàn)代碼

    python編寫彈球游戲的實現(xiàn)代碼

    這篇文章主要介紹了python編寫彈球游戲的實現(xiàn)代碼,需要的朋友可以參考下
    2018-03-03
  • 分享6 個值得收藏的 Python 代碼

    分享6 個值得收藏的 Python 代碼

    這篇文章主要分享了6 個值得收藏的 Python 代碼,希望隊長正在學習的你有所幫助,需要的小伙伴也可以參考一下
    2022-01-01
  • Python解決八皇后問題示例

    Python解決八皇后問題示例

    這篇文章主要介紹了Python解決八皇后問題,簡單描述了八皇后問題的原理并結合實例形式分析了Python基于遞歸算法解決八皇后問題的相關操作技巧,需要的朋友可以參考下
    2018-04-04
  • 在pandas中一次性刪除dataframe的多個列方法

    在pandas中一次性刪除dataframe的多個列方法

    下面小編就為大家分享一篇在pandas中一次性刪除dataframe的多個列方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python繪制已知點的坐標的直線實例

    python繪制已知點的坐標的直線實例

    今天小編就為大家分享一篇python繪制已知點的坐標的直線實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python之torch.no_grad()函數(shù)使用和示例

    Python之torch.no_grad()函數(shù)使用和示例

    這篇文章主要介紹了Python之torch.no_grad()函數(shù)使用和示例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Python爬取動態(tài)網(wǎng)頁中圖片的完整實例

    Python爬取動態(tài)網(wǎng)頁中圖片的完整實例

    這篇文章主要給大家介紹了關于Python爬取動態(tài)網(wǎng)頁中圖片的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python實現(xiàn)將Word和Excel文件轉換為PPT

    Python實現(xiàn)將Word和Excel文件轉換為PPT

    在日常工作中,我們經(jīng)常需要將多個Word文檔或Excel表格的內(nèi)容匯總到一個PPT演示文稿中,手動執(zhí)行這項任務可能非常耗時,因此,使用Python自動化這個過程可以大大提高效率,所以本文給大家介紹了Python實現(xiàn)將Word和Excel文件轉換為PPT,需要的朋友可以參考下
    2024-08-08
  • Python PyWebIO提升團隊效率使用介紹

    Python PyWebIO提升團隊效率使用介紹

    這篇文章主要為大家介紹了Python PyWebIO提升團隊效率使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論