[AI] tf.data Module : Keras

Ik·2022년 7월 26일
0

Data

목록 보기
17/34

tf.data Module

  • 데이터 입력 파이프라인을 위한 모듈
  • 모델 학습/평가를 위한 대용량 데이터셋을 제공(feeding)하기 위한 모듈
    • 전처리, 배치 크기, shuffling등을 한번에 처리
  • tf.data.Dataset 추상클래스에서 상속된 여러 가지 클래스들을 제공

Tensor - Data

  • TensorFlow의 기본 data type
  • Tensor를 이용해 데이터를 관리
    • 모델이 학습, 평가할 때 Tensor type이어야 하며 ndarray를 넣어주는 경우 내부적으로 tf.Tensor로 변형해서 처리
import tensorflow as tf
tf.constant()      #Tensor type 생성
# ex)
t = tf.constant([1,2,3], dtype="float32")
a = t.numpy()    # Tensor -> numpy
# numpy -> Tensor 2가지 방법
t2 = tf.constant(a)    
t3 = tf.convert_to_tensor(a)   

Dataset 분할

# raw_data1(data)를 넣어 dataset화, 원소 단위로 사용가능
dataset = tf.data.Dataset.from_tensor_slices(raw_data1)
# X,y로 형태로 나눠 원소 단위로 사용도 가능
dataset2 = tf.data.Dataset.from_tensor_slices((raw_data1, raw_data2)) 
# 지정한 갯수만큼 조회
dataset3 = dataset.take(3)   # index (0, 1, 2), 총 3개 조회

Dataset 처리

shuffle

  • 말 그대로 data set을 섞는다
dataset4 = dataset.shuffle(10)  # dataset의 원소의 개수가 10개인 경우 완전셔플
# buffer size에 따라 섞기 때문에 data전체를 섞기 위해서는 dataset 원소의 개수와 같거나 큰 수를 인수로 넣어야 한다

batch

  • batch로 제공할 데이터의 개수가 설정한 size 단위로 제공
    • remainder 이용해 나머지 제공 결정
  • 주로 2의 배수로 선정
dataset5 = dataset.batch(3, drop_remainder = True)  
# drop_remainder = True : 3개씩 자르고 나머지가 3개가 되지 않는 경우는 제공 X, 버림
# False : 나머지 사용

repeat

  • 반복횟수
dataset7 = dataset.repeat(2)    # 반복횟수 2회

Data set 전처리

map

  • 하나 하나의 데이터를 변환
dataset9 = dataset.map(mapping_func)   # mapping_func이란 함수를 각 원소에 모두 적용
dataset11 = dataset.map(lambda )     # lambda식도 이용 가능

filter

  • 특정 조건의 데이터만 제공
dataset13 = dataset.filter(filter_func)  # filter_func 함수 조건에 맞는 경우만 사용
# ex)
def filter_func(x):
    return x%2 == 0     # 2의 배수인 데이터만 사용하기 위한 함수
dataset14 = dataset.filter(lambda )  # 마찬가지로 lambda식 이용 가능

종합

# \ : enter형태로 보이지만 이어져있다는 의미
dataset_final = tf.data.Dataset.from_tensor_slices(raw_data)\
                               .filter(lambda x:x>=0)\
                               .map(lambda y:y+10)\
                               .shuffle(raw_data.size)\
                               .batch(3)

0개의 댓글