###### 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>