一、pytorch 安裝
此節操作假設已經安裝完Anaconda。
首先,先創建一個新的環境(如果想安裝在舊的環境也可以),再命令提示字元或終端機下輸入:
conda create -n env_name python=3.8
上面的env_name可以換成你想要取的環境名稱
接著,進入剛建立的環境,在終端機輸入
conda activate env_name
最後去pytorch官網按照自己的需求點選版本,把指令複製下來,在終端機輸入,如果是要安裝GPU版本,就要額外先安裝好cuda, cudnn,此篇暫不介紹
conda install pytorch torchvision torchaudio cpuonly -c pytorch
如此就完成了pytorch 的安裝。
二、Dataset
pytorch是一個深度網路的訓練框架,所以或多或少一定會有資料集合,而且多少會需要對資料做一些操作,比方說設定batch,這些操作在pytorch提供的模組DataLoader下,有很自動化方便的操作,但他只接受pytorch的Dataset,所以要先建立好Dataset,再將他送入DataLoader。
自定義的Dataset,必定要有三個方法在內,基本格式很固定,如下:
import torch
import torch.nn as nn
import torchvision
from torchvision import transforms
from torch.utils.data import Dataset, DataLoaderclass CustomDataset(Dataset):#繼承Dataset
def __init__(self, data, label):
# 假設data是一個numpy array的格式,也可以是DataFrame
# 要對資料有所理解才知道這邊要放啥
self.data = data # feature
self.label = label # label def __len__(self):
return len(self.data)
def __getitem__(self, index):
x_data = torch.FloatTensor(self.data[index])
y_label = torch.FloatTensor(self.label[index])
return (x_data, y_label)
以上__init__(), __len()__, __getitem__()是必要的,名稱不能改。
建立好類別後就分別建立訓練和測試的dataset
train_dataset = CustomDataset(train_data,train_label)
test_dataset = CustomDataset(test_data, test_label)
remark: CustomDataset這個名稱可以按照識別度自己取
三、DataLoader
這一步就簡單很多了,定義好batch_size和shuffle(預設True)與否,就結束了
batch_size = 256
train_loader = DataLoader(train_dataset,batch_size=batch_size)
test_loader = DataLoader(test_dataset,batch_size=batch_size)
四、Model建立
深度學習的模型建立,以下為範例,__init__(), super(), forward()這三個都是必要的。
五、Model training
定義好epochs, optimizer, loss function後,以for迴圈不斷的重複訓練即可
以上的
optimizer.zero_grad()
loss = loss_function(out, labels)
loss.backward()
optimizer.step()
這四步是更新model權重的固定流程
如果想要紀錄每個epoch執行完的loss,可以建立一個loss_hist的陣列,然後一個epoch結束後,用loss.item()方法回傳loss大小
六、validation
當model訓練完後,你一定會想要看看在testing set上的表現如何,固定格式如下:
主要是with torch.no_grad()
因為是要看表現,所以不計算梯度
而model.evale()是如果model中有dropout或batch normalization的操作,在測試上,通常會取消掉這個機制。
model.train()是因為測試完了,如果之後還有要繼續train model,那就要再把dropout這些機制重新開啟來。
總結
- 以上二~六的步驟,就是使用pytorch做機器學習或深度學習時的基本操作。
- 其中花最多心力的應該是CustomDataset的建立。
- 不同的model可能會要求不同的input,那與之對應的CustomDataset也會有所不同,不同資料型態的處理或特徵的預處理,都要在這邊做新增或修改。
- Model的建立要根據問題去挑選和建構。