[Coursera/IBM course #4] Dataset

2025. 6. 7. 16:48·🥇 certification logbook
728x90
반응형

[IBM course #4] Introduction to Neural Networks and PyTorch

 

Simple Dataset

Dataset 클래스

torch.utils.data.Dataset은 PyTorch에서 데이터셋을 커스터마이징할 수 있도록 제공하는 추상 클래스(Abstract Class)

주로 __init__, __len__, __getitem__ 메서드를 구현해서 나만의 데이터셋을 만들 수 있음

  • __init__ : 초기화 메서드. 파일 경로, 라벨, 전처리 등을 저장하고 준비
  • __len__ : 데이터셋의 총 길이 반환. len(dataset) 호출 시 몇 개의 샘플이 있는지 알려줌
  • __getitem__ : 주어진 index에 해당하는 데이터 샘플 하나를 반환. dataset[i] 호출 시 i번째 샘플과 라벨을 반환. 반환값은 (x[i], y[i]) 튜플 형태.

 

iterable

데이터셋 객체는 iterable로 for 루프로 순회 가능.

루프 시 __getitem__이 자동 호출되어 첫 3개 샘플을 추출 가능.

 

Transform 클래스

Transform 클래스는 PyTorch에서 데이터 전처리(preprocessing)를 손쉽게 적용할 수 있게 해주는 모듈형 도구

__call__() 메서드를 구현하여, 일반 함수처럼 사용할 수 있음

 

Dataset 클래스에서 transform 사용

class MyDataset(Dataset):
    def __init__(self, data, labels, transform=None):
        self.data = data
        self.labels = labels
        self.transform = transform

    def __getitem__(self, idx):
        x = self.data[idx]
        y = self.labels[idx]
        if self.transform:
            x = self.transform(x)  # 여기서 적용!
        return x, y
 
 dataset = MyDataset(transform=my_transform)

 

 

Compose

torchvision.transforms.Compose는 PyTorch에서 여러 개의 변환(transform)을 순서대로 적용할 수 있도록 해주는 도구(Wrapper 클래스)

여러 개의 transform을 리스트로 묶어, 순차적으로 적용하는 기능을 하며, 각 transform은 __call__()을 구현한 객체 또는 함수여야 함.

transform = transforms.Compose([Add(), Multiply()])

 

Datasets for Images

CSV 파일 활용

Pandas read_csv()로 레이블과 이미지 경로 불러오기.

각 행은 [클래스(의류 종류), 이미지 파일명]으로 구성.

 

개별 이미지 접근

이미지 경로 조합 후 Image.open()으로 불러오기.

라벨과 함께 이미지 출력 가능.

 

Dataset 클래스 작성

모든 이미지를 메모리에 로드하지 않음. 필요할 때마다 불러오는 방식(lazy loading) 사용 → 대규모 데이터에 적합.

__getitem__()에서 경로 통해 이미지 로드, 레이블 추출, (image, label) 튜플 반환 등을 진행

 

TorchVision Transform

transforms.CenterCrop (이미지 자르기)

transforms.ToTensor (이미지를 텐서로 변환)

→ Compose로 여러 변환을 조합 적용 가능

 

샘플 코드

csv 파일이 아래와 같은 구조일 때

label,filename

3,img_00001.png

7,img_00002.png

...

import torch
from torch.utils.data import Dataset
from torchvision import transforms
from PIL import Image
import pandas as pd
import os

class Dataset(Dataset):
    def __init__(self, csv_file, image_dir, transform=None):
        self.data = pd.read_csv(csv_file)         # CSV 파일 로드
        self.image_dir = image_dir                # 이미지 폴더 경로
        self.transform = transform                # 변환 함수 (Compose 등)

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        row = self.data.iloc[idx]
        img_path = os.path.join(self.image_dir, row['filename'])
        image = Image.open(img_path).convert('L')  # grayscale
        label = int(row['label'])

        if self.transform:
            image = self.transform(image)

        return image, label

transform = transforms.Compose([
    transforms.CenterCrop(24),
    transforms.ToTensor()
])

dataset = Dataset(
    csv_file='data.csv',
    image_dir='images',
    transform=transform
)

loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True)

for images, labels in loader:
    print(images.shape)  # torch.Size([32, 1, 24, 24])
    print(labels)
    break

 

(참고) TorchVision 내장 Dataset

torchvision.datasets.MNIST 사용

root, train, download, transform 파라미터 사용

이미 다운로드된 경우 재다운로드하지 않음

 

728x90
반응형

'🥇 certification logbook' 카테고리의 다른 글

[Coursera/IBM course #4] Linear Regression Prediction  (0) 2025.06.14
[Coursera/IBM course #4] Tensors  (2) 2025.06.07
[Coursera/IBM course #3] 강화학습(Reinforcement Learning)  (2) 2025.06.04
[Coursera/IBM course #3] Advanced Keras Techniques  (2) 2025.06.01
[Coursera/IBM course #3] Unsupervised Learning in Keras  (2) 2025.05.31
[Coursera/IBM course #3] Transformers in Keras  (2) 2025.05.28
[Coursera/IBM course #3] TensorFlow for Image Processing  (1) 2025.05.24
[Coursera/IBM course #3] TensorFlow 2.x  (1) 2025.05.21
'🥇 certification logbook' 카테고리의 다른 글
  • [Coursera/IBM course #4] Linear Regression Prediction
  • [Coursera/IBM course #4] Tensors
  • [Coursera/IBM course #3] 강화학습(Reinforcement Learning)
  • [Coursera/IBM course #3] Advanced Keras Techniques
이소야
이소야
✔ 공부 기록 ٩(๑•̀o•́๑)و
  • 이소야
    I study SO
    이소야
    ✔ 공부 기록 ٩(๑•̀o•́๑)و
  • 전체
    오늘
    어제
    • 분류 전체보기 (217)
      • 🤖 ai logbook (39)
      • 💻 developers logbook (1)
      • 🥇 certification logbook (67)
      • ⚖️ legal logbook (108)
      • ⚡ electronics logbook (1)
      • 🌍 english logbook (0)
      • 🎁 etc (1)
  • 최근 글

  • 인기 글

  • 태그

    IBM
    인공지능 입문
    기본권의기초이론
    데이터사이언스 입문
    certificate
    Python
    방통대
    근로기준법
    머신러닝
    deeplearning
    자격증
    형법
    빅데이터분석기사
    온라인 강의 추천
    법학과
    Coursera
    민법
    datascience
    데이터분석준전문가
    ADsP
  • hELLO· Designed By정상우.v4.10.3
이소야
[Coursera/IBM course #4] Dataset
상단으로

티스토리툴바