텐서플로우로 딥러닝 모델을 학습시키기 위한 첫번째 단계로 인풋데이터를 마련해야한다.
우선, 먼저 Tensorflow에서 지원하는 data input pipeline 문서를 보고 파악해보고자 한다.
https://www.tensorflow.org/guide/data
The tf.data API
input pipeline은 데이터 소스에서부터 시작해야한다.
Additional Reference : Better performance with the tf.data API
tf.data.Dataset object
Dataset object는 Python iterable (파이썬에서 지원되는 반복가능한 객체) 이다.
- 요소별 변환 : Dataset.map
- multi 요소 변환 : Dataset.batch
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에 최적화된 해당 포맷은 두가지 큰 장점이 있다.
- 효율적인 데이터 스토리지 형태
- 빠른 데이터셋 읽기 속도
TFRecordDataset은 tf.data.Dataset의 상속을 받으며, object는 아래와 같다.
tf.data.TFRecordDataset(
filenames,
compression_type=None,
buffer_size=None,
num_parallel_reads=None,
name=None
)
Additional Reference
- https://www.tensorflow.org/tutorials/load_data/tfrecord
- https://pyimagesearch.com/2022/08/08/introduction-to-tfrecords/
(▼ 추가 관련 용어 ▼)
Protocol buffers
- cross-platform
- cross-language
- 구조적인 데이터를 효율적으로 직렬화한다.
Protocol messages
- .proto 파일로 메시지를 정의한다.
tf.train.Example message (or protobuf)
- {"string": value} 이러한 매핑 형태를 띄는 메시지
- Tensorflow에서 사용하거나 higher-level API(ex. TFX)에서 사용한다.
'Programming > python-deep learning' 카테고리의 다른 글
[tensorflow] RaggedTensor란? (0) | 2024.01.15 |
---|---|
Tensorflow의 Loss Function과 Metrics의 차이 (0) | 2023.10.05 |
[Tensorflow] 그림으로 이해하는 CNN 연산과정 (코드포함) (0) | 2023.09.21 |
Pytorch로 Tensor Operation 다루는 법! (기본 기능 모음) (0) | 2023.09.01 |
Tensor란 무엇인가? (+ Python Numpy Tensor 구현 및 기본 기능) (1) | 2023.08.31 |