pytorch 로 classifier 모델을 만들어보자.
Data Load
- sklearn 의 load_digits 함수를 사용해서 데이터를 로딩한다.
- train, test 데이터를 분리한다
- train_loader 및 test tensor를 만든다.
from sklearn import datasets
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset, DataLoader, random_split
data = datasets.load_digits()
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=0)
train_set = TensorDataset(torch.tensor(x_train).float(), torch.tensor(y_train).long())
train_loader = DataLoader(train_set, batch_size=128)
x_test = torch.tensor(x_test).float()
y_test = torch.tensor(y_test).long()
Model, Loss function, Optimizer 만들기
- model, loss function, optimizer를 만든다.
- model 내 마지막 softmax 가 없음을 주의한다 (cross_entropy 계산시 softmax 자동 적용)
model = nn.Sequential(
nn.Linear(data.data.shape[-1], len(set(data.target)))
)
loss_fn = nn.functional.cross_entropy
optimizer= torch.optim.SGD(model.parameters(), lr=0.001)
학습하기
- train 함수를 정의하고 학습을 수행한다.
- loss=0.013
- y가 1D tensor 임을 주의한다 (model의 output tensor와 차원이 다름)
def train(loader, model, loss_fn, optimizer):
epoch=1000
print_num=100
for e in range(epoch):
for i, (x, y) in enumerate(loader):
pred = model(x)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if e % print_num == 0:
print(e, loss.item())
print(e, loss.item())
train(train_loader, model, loss_fn, optimizer)
Accuracy 확인하기
- test 데이터를 활용해 성능을 측정한다.
- pytorch 는 기본적으로 accuracy 계산 패키지가 없기 떄문에 torchmetrics 패키지를 사용한다.
import torchmetrics
with torch.no_grad():
model.eval()
accuracy = torchmetrics.Accuracy(task="multiclass", num_classes=len(set(data.target)))
pred = model(x_test)
print(accuracy(pred, y_test))
반응형
'IT > Machine Learning' 카테고리의 다른 글
pytorch EarlyStopping 적용하기 (0) | 2023.06.15 |
---|---|
Ray tune 를 사용해서 pytorch hyperparameter 최적화하기 (feat. diabetes) (0) | 2023.06.14 |
Pytorch Linear/MLP Regression 튜토리얼 (feat. sklearn diabetes datasets) (0) | 2023.06.13 |
회귀모델 성능지표 결정계수란? (feat. 기준값, 음수, 조정된 결정계수) (2) | 2021.03.03 |
MLP 파라미터(param) 개수 자세히 알기 (feat. 케라스) (2) | 2020.12.17 |