###### tags: `Pytorch 筆記` {%hackmd @kk6333/theme-sty1 %} # Pytorch 筆記 : Dataset & DataLoader ### 0.Import ```python= import torch # pytorch 模組 import torch.nn as nn # 用以建構神經網路 # 創建自訂 Dataset, Dataloader from torch.utils.data import DataLoader, Dataset ``` --- <br> ### 1. 自製 Dataset 用 Pytorch 自製可讀取 Dataset 要用以下類別 並繼承 **Dataset** 類別 且一定要有這三個函數 - **init** : 用來初始化 dataset (也可以進行資料預處理) - **getitem** : 之後會根據讀取的 index 回傳對應資料 - **len** : 獲得資料長度 ```python= # 製作 dataset class MyDataset( Dataset ): def __init__(self, x, y): # 將 input data 轉為 pytorch Tensor self.x = torch.FloatTensor(x) self.y = torch.FloatTensor(y) def __getitem__(self, index): return self.x[index], self.y[index] def __len__(self): return len(self.x) ``` 實例化 Dataset ```python=+ # 製作成 dataset train_dataset = MyDataset(X_train, Y_train) val_dataset = MyDataset(X_val, Y_val) ``` --- <br> ### 2. DataLoader 用來將 Dataset 分割成 Batch, 用在訓練、驗證時讀取資料 ```python=+ # 做成 dataloader # shuffle : 隨機資料分配 train_loader = DataLoader( train_dataset, batch_size, shuffle=True) val_loader = DataLoader( val_dataset, batch_size, shuffle=True) ``` #### Dataloader 用法 利用迴圈可以將 dataloader 中的 batch 一個個的取出 ```python= for batch in train_loader: print(batch) # batch 資料 ``` 也常常會使用 enumerate() 將每個 batch 對應到 index 編號 ```python= for batch_num, batch in enumerate(dataloader): print(batch_num) # batch 編號 print(batch) # batch 資料 ``` --- <br>