tf.data API 사용import tensorflow as tf
# 텍스트 파일에서 데이터 읽기
dataset = tf.data.TextLineDataset("data.txt")
dataset = dataset.map(lambda x: tf.strings.split(x))
# CSV 파일에서 데이터 읽기
dataset = tf.data.experimental.CsvDataset("data.csv", [tf.float32, tf.int32])
# 32개 배치 단위로 분할하기
dataset = dataset.batch(32)
# 데이터 iterate
for data in dataset:
print(data)
다양한 공용 데이터셋을 손쉽게 다운로드하고 사용할 수 있게 해주는 라이브러리
여러 데이터셋을 미리 전처리하여 제공하므로 즉시 모델 학습에 사용할 수 있다는 장점이 있음
import tensorflow_datasets as tfds
# MNIST 데이터셋 로드
dataset, info = tfds.load('mnist', with_info=True, as_supervised=True)
# 학습 데이터와 테스트 데이터 나누기
train_dataset, test_dataset = dataset['train'], dataset['test']
import numpy as np
import tensorflow as tf
# NumPy 배열 생성
data = np.array([[1, 2, 3], [4, 5, 6]])
# TensorFlow 텐서로 변환
tensor_data = tf.convert_to_tensor(data)
tf.io.read_file() 함수를 이용하여 바이너리 파일을 읽고 상황에 맞게 변환하는 방법도 제공함import tensorflow as tf
image_path = 'image.jpg'
image = tf.io.read_file(image_path)
image = tf.image.decode_jpeg(image, channels=3) # 바이너리 파일에 대한 추가적 전처리
image = tf.image.resize(image, [256, 256])
tf.data API 파이프라인tf.data API는 데이터를 효율적으로 처리하고 파이프라인을 구성하는 데 도움이 됨from_tensor_slices()import tensorflow as tf
data = [[1, 2], [3, 4], [5, 6]]
dataset = tf.data.Dataset.from_tensor_slices(data)
for data in dataset:
print(data)
# tf.Tensor([1 2], shape=(2,), dtype=int32)
# tf.Tensor([3 4], shape=(2,), dtype=int32)
# tf.Tensor([5 6], shape=(2,), dtype=int32)
map()dataset = dataset.map(lambda x: x * 2)
for data in dataset:
print(data)
# tf.Tensor([2 4], shape=(2,), dtype=int32)
# tf.Tensor([6 8], shape=(2,), dtype=int32)
# tf.Tensor([10 12], shape=(2,), dtype=int32)
batch()dataset = dataset.batch(2)
for data in dataset:
print(data)
# tf.Tensor([[2 4]
# [6 8]], shape=(2, 2), dtype=int32)
# tf.Tensor([[10 12]], shape=(1, 2), dtype=int32)
shuffle()dataset = dataset.shuffle(buffer_size=1_000)
for data in dataset:
print(data)
# tf.Tensor([[10 12]], shape=(1, 2), dtype=int32)
# tf.Tensor([[2 4]
# [6 8]], shape=(2, 2), dtype=int32)
prefetch()dataset = dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
repeat()repeat()를 사용하지 않으면 1 epoch 이후 학습이 종료됨repeat()를 호출하면 데이터셋을 무한히 반복하여 사용할 수 있으며, 내부에 인자를 전달할 경우 해당 인자만큼 사용할 수 있음dataset = dataset.repeat(2) # 2회 사용 가능
AUTOTUNEmap()과 prefetch()와 자주 함께 사용됨dataset = dataset.map(
lambda x: x * 2,
num_parallel_calls=tf.data.experimental.AUTOTUNE # 데이터 처리시 병렬 사용 CPU를 자동으로 선정
)
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.