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 = 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])