1. 필요한 라이브러리 호출
import copy #객체복사를 위해 사용
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data as data
import torchvision
import torchvision.transforms as transforms
import torchvision.datasets as Datasets
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
2. 이미지 데이터 전처리
- 똑같음 전에 썻던거랑
- train 에 transforms에 resize, random rotation, randomhorizontalflip, ToTensor, normalize
- test → resize, toTensor, normalize
train_transforms = transforms.Compose([
transforms.Resize((256, 256)),
transforms.RandomRotation(5),
transforms.RandomHorizontalFlip(0.5),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
test_transforms = transforms.Compose([
transforms.Resize((256, 256)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
3. 데이터셋 불러오기
cat_directory = 'C:/Users/hop09/Downloads/dogs-vs-cats/cats'
dog_directory = 'C:/Users/hop09/Downloads/dogs-vs-cats/dogs'
train_dataset = torchvision.datasets.ImageFolder( # 엥 이미지폴더 뭐임
train_path,
transform=train_transforms
) ------ ①
test_dataset = torchvision.datasets.ImageFolder(
test_path,
transform=test_transforms
)
print(len(train_dataset)), print(len(test_dataset))
4. 훈련, 검증 데이터 분할
VALID_RATIO = 0.9
n_train_examples = int(len(train_dataset) * VALID_RATIO)
n_valid_examples = len(train_dataset) - n_train_examples
train_data, valid_data = data.random_split(train_dataset, [n_train_examples, n_valid_examples])