2023. 9. 17. 14:32ㆍ딥러닝 모델: 파이토치
♣ DataBlock
데이터 블록은 데이터 조립을 위한 파이프라인일 뿐입니다. 데이터 블록을 처음 생성할 때 데이터를 명시할 필요는 없습니다. 그러나 데이터가 흐를 때 어떻게 처리할지에 대한 규칙을 명시해야 합니다. 데이터가 어떻게 수집, 분류 및 분할되어야 하는지에 대해 관심이 있으며, 데이터가 무엇으로 사용될지는 상관하지 않습니다.
데이터 블록을 생성하려면 다음을 명시해야 합니다.
- 입력(즉, 특성)과 목표 변수(즉, 레이블)에 대한 예상 데이터 유형
- 데이터를 가져오는 방법
- 목표 변수로부터 특성을 구분하는 방법
- 훈련을 위해 데이터를 분할하는 방법(훈련 및 검증 세트)
어떻게 하는지 살펴보겠습니다. 아래는 고양이의 다른 종(즉, 분류 모델)을 인식하기 위해 합성곱 신경망(CNN)을 생성하려면 만들어볼 수 있는 예제 데이터 블록입니다.
위 코드에서 언급한 네 가지 주요 단계는 DataBlock의 처음 네 가지(필수) 인수와 정확히 일치합니다:
- blocks: 여기에서 모델이 작동할 데이터 유형을 정의합니다. 일반적으로 최소 두 개의 블록을 지정합니다. 하나는 독립(입력) 변수를 나타내고, 다른 하나는 종속(목표) 변수를 나타냅니다. 여러 입력/출력 변수를 지정할 수도 있습니다.
- get_items: 필요할 때 실제로 데이터를 가져올 함수입니다.
- splitter: 데이터를 훈련 및 검증 세트로 나누는 방법입니다. seed(씨앗)는 선택 사항이며 재현성을 위해 추가됩니다.
- get_y: 데이터에서 목표(종속) 변수를 추출하는 방법입니다. 우리 고양이 분류기의 경우, 이는 상위 폴더를 보고 판별하게 됩니다. 또한 fast.ai에서 parent_label이라는 내장 함수를 제공합니다.
item_tfms는 데이터를 흐를 때 수행해야 하는 추가 처리를 지정하기 위해 포함할 수 있는 선택적 인수입니다. 이 경우 이미지를 모두 128x128로 크기 조정할 것입니다. 다른 변환을 지정할 수도 있습니다. 예를 들어 item_tfms=Resize(128, ResizeMethod.Squish)는 이미지를 크기 조정하고 눌러 맞출 것이며, item_tfms=Resize(128, ResizeMethod.Pad, pad_mode='zeros')는 남은 공간을 검은 색으로 채우면서 크기를 조정합니다. 이 방법은 데이터 증강도 지원하므로 매우 강력합니다. 이 블로그 포스트의 범위를 벗어나지만 item_tfms를 사용하면 데이터가 모델에 전달되기 전에 데이터를 사전 처리할 수 있음을 알아두세요.
♣ DataLoader
데이터 블록을 정의했으며 데이터가 어떻게 구조화, 분류되고 처리되어야 하는지 정확히 지정했습니다. 이제 실제로 모델 훈련에 사용할 데이터를 제공할 수 있습니다. 이 데이터 DataLoader를 사용하여 로드합니다. 여기에서 DataLoaders가 등장합니다. DataLoaders는 DataBlock이 지정한 규칙에 따라 데이터를 특정 배치 크기로 로드하기 위해 호출하는 반복자 클래스입니다.
fast.ai에서의 DataLoader는 PyTorch DataLoader의 슈퍼셋으로, 더 많은 유용한 콜백과 유연성을 제공합니다. 데이터 블록은 데이터를 어떻게 구조화할지 알고 있지만, 로더는 기계 학습 모델을 훈련하는 맥락에서 데이터 작업 방법을 알고 있습니다. 즉, 한 번에 모델에 얼마나 많은 데이터를 공급할지(배치 크기), 데이터를 로드하기 위해 몇 개의 프로세스를 생성할지, 얼마나 많은 메모리를 할당할지 등을 알고 있습니다.
DataLoaders(복수형)는 DataBlock에서 지정한 규칙에 따라 여러 DataLoader(단수형) 객체를 자동으로 생성하는 가볍게 감싸진 클래스입니다.
♣ 정리
- DataBlock (데이터 블록): 데이터 파이프라인입니다. 데이터가 없지만 데이터 처리 방법에 대한 모든 정보를 가지고 있는 템플릿입니다. 예를 들어 데이터를 어떻게 분할할지, 특성과 목표/레이블의 데이터 유형, 기본 데이터에서 레이블을 추출하는 방법(예: 폴더 이름) 등이 포함됩니다.
- DataLoader (데이터 로더): 데이터 준비에 대해 신경 쓰지 않으며 데이터가 준비되었다고 가정하며 데이터를 로드하는 방법(병렬로 처리할지 단일 프로세스로 처리할지) 및 모델에 데이터를 일괄(batch)로 공급하는 방법(즉, 배치 크기)에만 관심이 있습니다.
- DataLoaders (데이터 로더들): 하나 이상의 DataLoader를 더 간단하게 다루기 위한 래퍼입니다. DataBlock에서 지정한 규칙에 따라 여러 개의 DataLoader를 자동으로 생성하고 관리합니다.
요약하면, DataBlock은 데이터를 어떻게 처리해야 하는지에 대한 설정 및 템플릿을 제공하고, DataLoader는 실제 데이터를 로드하고 모델에 공급하는 역할을 합니다. DataLoaders는 이러한 DataLoader들을 한 곳에서 관리하고 조정하여 작업을 단순화합니다.
DataBlock과 DataLoader를 이용하여 DataLoader를 만드는 두 가지 방법 비교
https://jy-deeplearning.tistory.com/14
♣ 참고
https://muttoni.github.io/blog/machine-learning/fastai/2020/12/26/datablocks-vs-dataloaders.html
'딥러닝 모델: 파이토치' 카테고리의 다른 글
파이토치 튜토리얼 (1) | 2023.10.07 |
---|---|
밑바닥부터 Learner 클래스 만들기 (0) | 2023.09.20 |
ImageDataLoaders vs ImageDataBunch (0) | 2023.08.15 |
텐서(Tensor) (0) | 2023.08.07 |
옵티마이저(최적화)의 의미와 경사하강법(Gradient Descent) (0) | 2023.07.16 |