Programming/python-deep learning

[Tensorflow 2.0] 텐서플로우 데이터 구조 파악하기 (tf.data.Dataset + TFRecord)

방황하는 데이터불도저 2024. 1. 19. 18:00

텐서플로우로 딥러닝 모델을 학습시키기 위한 첫번째 단계로 인풋데이터를 마련해야한다.
 
우선, 먼저 Tensorflow에서 지원하는 data input pipeline 문서를 보고 파악해보고자 한다.
https://www.tensorflow.org/guide/data

 

tf.data: TensorFlow 입력 파이프라인 빌드  |  TensorFlow Core

tf.data: TensorFlow 입력 파이프라인 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. tf.data API를 사용하면 간단하고 재사용 가능한 조각으로 복잡한 입력 파

www.tensorflow.org

The tf.data API 

input pipeline은 데이터 소스에서부터 시작해야한다.

Additional Reference : Better performance with the tf.data API

 

tf.data.Dataset object

Dataset object는 Python iterable (파이썬에서 지원되는 반복가능한 객체) 이다.

dataset = tf.data.Dataset.from_tensor_slices([8, 3, 0, 8, 2, 1])

for elem in dataset:
  print(elem.numpy())


it = iter(dataset)
print(next(it).numpy())

 
reduce transformation은 iterable 내의 모든 item에 대해 어떤 연산을 통해 하나의 결과값으로 출력되게끔 하는 기능을 지원한다.

  •  lambda 연산을 통해 모든 item의 sum을 출력
print(dataset.reduce(0, lambda state, value: state + value).numpy())

 

Dataset Structure

데이터셋은 요소들의 연속 (a sequence of elements) 이다.
데이터셋의 구조 속에 각각의 성분들은 tf.TypeSpec으로 표현할 수 있다.

spec = tf.TensorSpec(shape=[None, None], dtype=tf.int32)
@tf.function(input_signature=[spec])
def double(x):
  return x * 2
double(tf.constant([[1, 2], [3, 4]]))

##
<tf.Tensor: shape=(2,2), dtype=int32,
	numpy=array([[2,4], [6,8]], dtype=int32)>

 
tf.TypeSpec에는 아래를 포함한다.

  • tf.Tensor
  • tf.sparse.SparseTensor
  • tf.RaggedTensor
  • tf.TensorArray
  • tf.data.Dataset

tf.data.TFRecordDataset object

다음으로 알아볼 것은 TFRecord로 해당 포맷은 텐서플로우에서 제공하는 바이너리 파일이다.
Tensorflow에 최적화된 해당 포맷은 두가지 큰 장점이 있다.

  1. 효율적인 데이터 스토리지 형태
  2. 빠른 데이터셋 읽기 속도

TFRecordDataset은 tf.data.Dataset의 상속을 받으며, object는 아래와 같다.

tf.data.TFRecordDataset(
    filenames,
    compression_type=None,
    buffer_size=None,
    num_parallel_reads=None,
    name=None
)

 

Additional Reference

  1.  https://www.tensorflow.org/tutorials/load_data/tfrecord
  2.  https://pyimagesearch.com/2022/08/08/introduction-to-tfrecords/
 

TFRecord 및 tf.Example  |  TensorFlow Core

TFRecord 및 tf.Example 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 데이터를 효율적으로 읽으려면 데이터를 직렬화하여 각각을 선형적으로 읽을 수 있는 파

www.tensorflow.org

 

Introduction to TFRecords - PyImageSearch

A tutorial on TensorFlow’s TFRecords.

pyimagesearch.com

(▼ 추가 관련 용어 ▼)

더보기

Protocol buffers

  -  cross-platform

  -  cross-language

  - 구조적인 데이터를 효율적으로 직렬화한다.

 

Protocol messages

  -  .proto 파일로 메시지를 정의한다.

 

tf.train.Example message (or protobuf)

  -  {"string": value} 이러한 매핑 형태를 띄는 메시지 

  -  Tensorflow에서 사용하거나 higher-level API(ex. TFX)에서 사용한다.