Pytorch

[PyTorch] dataset.FashionMNIST 파라미터

코딩초보ran 2023. 12. 22. 11:32

dataset.FashionMNIST 설명

 PyTorch는 torch.utils.data.DataLoader 와 torch.utils.data.Dataset 의 두 가지 데이터 기본 요소를 제공하여 미리 준비해둔(pre-loaded) 데이터셋 뿐만 아니라 가지고 있는 데이터를 사용할 수 있게 만들어두었다.

pre-loaded 데이터셋으로는 이미지 데이터셋, 텍스트 데이터셋, 오디오 데이터셋이 있다.

오늘 설명하고자 하는 것은 pre-loaded 데이터셋 중 이미지 데이터셋을 불러오는 코드이다.

Fashion-MNIST는 Zalando의 기사 이미지 데이터셋으로 60,000개의 학습 예제와 10,000개의 테스트 예제로 이루어져 있다. 각 예제는 흑백(grayscale)의 28x28 이미지와 10개 분류(class) 중 하나인 정답(label)으로 구성되어 있다.

dataset.FashionMNIST 데이터 불러오기 예제 코드

아래는 PyTorch tutorial 에서 제공하고 있는 실습 코드이다.

import torch
from torch.utils.data import Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt

training_data = datasets.FashionMNIST(
    root='data',    # 데이터가 저장되는 경로
    train=True,     # 이 데이터가 train data인지 여부
    download=True,  # root에 해당 data가 없으면 인터넷에서 다운로드 (Q. 인터넷 연결 안 되어 있으면?)
    transform=ToTensor() # 이미지 또는 numpy 배열 구조를 바꿔준다 -> 아래에서 추가설명
)

test_data = datasets.FashionMNIST(
    root='data',
    train=False,    # test dataset을 불러오고자 할 땐 train=False
    download=True,
    transform=ToTensor()
)

 


ToTensor 추가 설명

ToTensor 는 PyTorch의 torchvision.transforms 모듈에서 제공되는 변환(Transform) 중 하나이다.

 

ToTensor 는 크게 2가지 기능을 한다.

  • 1. 이 변환은 이미지를 PyTorch 텐서로 변환한다.
    • PyTorch에서는 주로 이미지 데이터를 다룰 때 Tensor 형식으로 사용하기 때문에 이미지를 PyTorch 텐서로 변환하는 작업이 필요할 때 사용된다.
  • 2. 이미지 픽셀값을 Scaling 한다.
    • 보통 이미지는 0~255까지의 정수 값으로 표현되는데, ToTensor 를 이용하면 이 값을 0~1까지의 실수 값으로 scale을 조정한다. 즉, 픽셀 값이 0일 때는 0.0, 픽셀 값이 255일 때는 1.0 이 되도록 변환한다.

ToTensor 예제 코드

from torchvision.transforms import ToTensor
from PIL import Image

# 이미지 파일 열기
image = Image.open("example.jpg")

# ToTensor 변환 적용
to_tensor = ToTensor()
tensor_image = to_tensor(image)

print(tensor_image)

 

tensor_imagetorch.Tensor 형식의 이미지 데이터가 된다.

이렇게 PyTorch 텐서로 이미지를 변환하면 신경망 모델에 입력으로 사용하기 쉽다.


PyTorch tutorial 실습 코드에서 ToTensor 확인하기

transform=ToTensor() 없을 때

 

transform=ToTensor() 있을 때


데이터셋 순회하고 시각화하기

labels_map = {
    0: "T-Shirt",
    1: "Trouser",
    2: "Pullover",
    3: "Dress",
    4: "Coat",
    5: "Sandal",
    6: "Shirt",
    7: "Sneaker",
    8: "Bag",
    9: "Ankle Boot",
}

figure = plt.figure(figsize=(8,8)) # 데이터 출력할 도화지
cols, rows = 3,3
for i in range(1, cols * rows+1):
  sample_idx = torch.randint(len(training_data), size=(1,)).item() # training data 개수 중 랜덤 int값
  img, label = training_data[sample_idx] # img: 이미지 픽셀값(tensor), lable: lable(0~9)
  figure.add_subplot(rows, cols, i) # 데이터 출력할 도화지를 여러 개로 쪼갠 도화지로 만들기
                                    # (여기서는 3행 3열로 쪼갠 칸에서 0번째에 출력한다. 이렇게 이해하면 됨)
  plt.title(labels_map[label]) 
  plt.axis("off")    # x,y 축(axis) 없애기
  plt.imshow(img.squeeze(), cmap='gray') # cmap : 데이터 값 색상 지정
plt.show()

 

출력결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import torch
from torch.utils.data import Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt
 
training_data = datasets.FashionMNIST(
    root='data',    # 데이터가 저장되는 경로
    train=True,     # 이 데이터가 train data인지 여부
    download=True,  # root에 해당 data가 없으면 인터넷에서 다운로드 (Q. 인터넷 연결 안 되어 있으면?)
    transform=ToTensor() # 이미지 또는 numpy 배열 구조를 바꿔준다 -> 아래에서 추가설명
)
 
test_data = datasets.FashionMNIST(
    root='data',
    train=False,    # test dataset을 불러오고자 할 땐 train=False
    download=True,
    transform=ToTensor()
)
cs