tf.data 모듈
- 데이터 입력 Pipeline을 위한 모듈
model.fit(X, y, epochs=100)
처럼 입력데이터(raw dataset)를 그냥 넣을 수도 있지만 Pipeline을 사용해 전처리, batch_size, shuffling 등 한번에 처리해 줄 수 있다.
- tf.data.Dataset 추상클래스에서 상속된 여러가지 클래스들을 제공
- 입력 소스의 제공 형태, 어떤 처리를 하는지에 따라 다양한 하위클래스들이 제공된다.
Dataset API 사용
- Dataset 생성
- raw dataset을 지정 (Loading)
- from_tensor_slices(), from_generator() 클래스 메소드, tf.data.TFRecordDataset 클래스 등을 사용해 메모리나 파일에 있는 데이터를 Dataset으로 만든다.
- from_tensor_slices(): 메모리의 리스트, 넘파이배열, 텐서플로 자료형에서 데이터를 생성한다.
- 제공 데이터 전처리
- map(함수): Dataset이 제공하는 원소를 처리해서 변환된 원소를 제공하도록 한다.
- 함수: 원소를 어떻게 변환할 지 정의한 함수를 매개변수로 전달한다.
- 매개변수: Dataset이 제공하는 원소를 받을 변수.
- 반환값: Dataset이 제공한 원소를 변경처리한 값.
- 함수: 원소를 어떻게 변환할 지 정의한 함수를 매개변수로 전달한다.
- filter(함수): Dataset이 제공하는 원소중 특정 조건을 만족하는(True)인 원소들만 제공한다.
- 함수: 원소가 특정조건을 만족하는지 여부를 확인하는 로직을 정의한 함수를 매개변수로 전달한다.
- 매개변수: Dataset이 제공하는 원소를 받을 변수.
- 반환값: Dataset이 제공한 원소가 특정조건을 만족하는지 여부(bool)
- 함수: 원소가 특정조건을 만족하는지 여부를 확인하는 로직을 정의한 함수를 매개변수로 전달한다.
- map(함수): Dataset이 제공하는 원소를 처리해서 변환된 원소를 제공하도록 한다.
- 데이터 제공 설정 관련
- batch(size): 학습/평가시 한번에 제공할 batch size 지정
- size: int. batch size 지정
- drop_remainder: bool. True일 경우 마지막 제공시 남은 데이터수가 batch size보다 작으면 제공하지 않는다.
- shuffle(buffer 크기): dataset의 원소들의 순서를 섞는다.
- buffer 크기: int. buffer 크기는 섞는 공간의 크기로 데이터보다 크거나 같으면 완전셔플, 적으면 일부만 가져와서 섞어 완전셔플이 안된다.
- 데이터 사이즈가 너무 커서 메모리가 부족할 경우 버퍼크기를 적게 준다.
- 메모리가 충분하다면 데이터의 개수와 동일하게 주면된다.
- repeat(count): 전체 데이터를 한번 다 제공한 뒤 다시 데이터를 제공한다.
- count: 몇번 제공할지 반복 횟수
- shuffle이 적용된 Dataset의 경우 다음 반복 제공마다 shuffle을 진행한다. (에폭단위)
- batch(size): 학습/평가시 한번에 제공할 batch size 지정
- 각 tf.data 함수들은 각 기능에 맞게 데이터를 처리하는 Dataset 객체를 반환한다.
Dataset 메소드
- take(개수): 지정한 개수만큼의 데이터만 제공한다.
Tensor Type
- TensorFlow의 기본 data 자료구조.
- numpy가 ndarray를 이용해 데이터를 관리하듯이 tensorflow를 Tensor를 이용해 데이터를 관리한다.
- Tesorflow의 모델이 학습, 평가할때 사용하는 데이터셋(train dataset, validation dataset, test dataset)은 tf.Tensor 타입이어야 한다.
- 학습/평가(model.fit(), model.evaluate()) 할때 ndarray를 입력 데이터셋으로 넣어주면 내부적으로 tf.Tensor로 변형해서 처리.
- tf.Tensor는 데이터셋을 ndarray로 가지고 있다.
- TF 생성 예시
1 t = tf.constant([1, 2, 3], dtype='float32')