網站首頁 編程語言 正文
一、Dataset
Dataset 類提供一種方式去獲取數據及其標簽
主要有兩個目的:
- 獲取每一個數據及其標簽
- 獲取數據的總量大小
1. 在控制臺進行操作
Hymenoptera (膜翅目昆蟲)數據集下載地址:
鏈接: https://pan.baidu.com/s/1XKwXsAtE2yzZW2IsvBDpnw?pwd=8a5t
提取碼: 8a5t?
這是一個螞蟻蜜蜂二分類的數據集,通常數據集有以下三種組織形式(上面的數據集屬于第一種):
- 不同的類別以文件夾的形式存在,文件夾中是該類別的圖片
- 圖片與標簽分別存儲,圖片在一個文件夾下,
label
信息在另一個文件夾下 -
label
直接寫在圖片名稱里
①獲取圖片的基本信息
在Pycharm 中,點擊下方的PythonConsole進入控制臺進行操作(通過控制臺可以看到變量的詳細信息)
首先加載圖片,逐行輸入下方代碼:
from PIL import Image img_path = "./dataset/hymenoptera_data/train/ants/0013035.jpg" img = Image.open(img_path)
此時我們就可以在右側看到相關變量的信息:
點擊img
變量,可以查看圖片的詳細信息。通過控制臺執行程序能夠直觀地獲取后續操作所需的數據:
最后可以通過img.show()
打開圖片查看:
②獲取文件的基本信息
同樣還是在控制臺逐行輸入以下代碼:
dir_path = "dataset/hymenoptera_data/train/ants" import os img_path_list = os.listdir(dir_path) img_path_list[0]
我們就可以獲取到文件夾下的文件名稱,由于是使用控制臺,我們還可以在右側查看列表的詳細信息:
因此在控制臺操作是有很大的優點的,我們可以在控制臺逐行執行已經編寫好的文件中的語句,通過查看右側變量的值來判斷程序寫的是否有問題
2. 編寫一個繼承Dataset 的類加載數據
下面的代碼也可以在控制臺運行(可以多行復制粘貼)來檢驗程序是否有誤
①定義 MyData類
導入所需頭文件:
from torch.utils.data import Dataset from PIL import Image import os
定義MyData
類:
-
__init__
:初始化函數 -
__getitem__
:返回指定下標的圖片和標簽 -
__len__
:返回數據集的大小
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()
可以實現多個路徑的合并且不出錯
②創建類的實例并調用
創建 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)
調用類中寫好的函數:
img, label = ants_dataset.__getitem__(3) print(ants_dataset.__len__(), label) img.show()
同時我們也可以通過下面這種方式用已有的數據集來創造數據集:
train_dataset = ants_dataset + bees_dataset
二、DataLoader
- DataLoader 類是為后面的網絡提供不同的數據形式
- DataLoader 會根據
batch_size
的值對數據進行打包 - 導入所需的包
import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter
加載數據:
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()
原文鏈接:https://blog.csdn.net/weixin_53312629/article/details/126616169
相關推薦
- 2022-06-21 Android?studio實現動態背景頁面_Android
- 2022-10-23 Android實現底部滾輪式選擇彈跳框_Android
- 2022-04-10 cmd無法加載命令解決方法
- 2022-05-05 Python學習之集合的常用方法總結_python
- 2023-01-14 Android?ANR無響應分析解決方案_Android
- 2023-04-10 Python中figure與axies繪圖有哪些不同_python
- 2022-05-10 原生ajax 設置get請求參數和請求頭信息和發送 post請求
- 2022-04-16 pycharm如何設置自動生成作者信息_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支