-
[HandsOn]13. 텐서플로에서 데이터 적재와 전처리하기 - 내용 정리2[도서완독]Hands On Machine Learning 2022. 7. 29. 20:39
13.2 TFRecord 포맷
csv 형식으로는 이미지나 오디오 같은 데이터 구조를 지원하지 못함.
이 대신 TFRecord를 사용하는 방법을 알아보자.
대용량 데이터를 저장하고 효율적으로 읽기 위해 텐서플로가 선호하는 포맷.
크기가 다른 연속된 이진 레코드를 저장하는 단순한 이진 포맷이다(<- 무슨소리지?)
뭔가... tf.io.TFRecordWriter 클래스를 사용해 TFRecord를 손쉽게 만들수 있다고 함.
with tf.io.TFRecordWriter("my_data.tfrecord") as f: f.write(b"This is the first record") f.write(b"And this is the second record") filepaths=["my_data.tfrecord"] dataset=tf.data.TFRecordDataset(filepaths) for item in dataset: print(item)
근데 사실 책에 있는 내용 너무 어렵고.... 프로토콜 버퍼에 대해 이해할 수 없을 것 같아
책에 있는 내용은 포기하고 구글링한 블로그 글을 이해하고 마치려고 한다. (ㅠㅠㅋㅋㅋ)
https://velog.io/@riverdeer/TFRecord-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B3%A0-%EC%93%B0%EA%B8%B0
이 블로그를 참조하여 공부했다.
TFRecord 파일은 tensorflow의 학습 데이터등을 저장하기 위한 바이너리 데이터 포맷으로, 구글의 Protocol Buffer 포맷으로 데이터를 파일에 Serialize(직렬화)하여 저장한다.
TFRecord 파일의 필요성은 아래와 같다.
1.
CSV 파일에서와 같이 숫자나 텍스트 데이터를 읽을 때는 크게 지장이 없지만,
이미지 데이터를 읽을 경우 이미지는 JPEG나 PNG형태의 파일로 저장되어 있고 이에 대한 메타 데이터와 레이블은 별도의 파일에 저장되어 있기 때문에, 학습 데이터를 읽을 때 메타데이터나 레이블 파일 하나만 읽는 것이 아니라 이미지 파일도 별도로 읽어야 하기 때문에, 코드가 복잡해진다.
2.
이미지를 JPG나 PNG 포맷으로 읽어서 매번 디코딩을 하게되면, 그 성능이 저하되서 학습단계에서 데이터를 읽는 부분에서 많은 성능 저하가 발생한다.출처: https://bcho.tistory.com/1190
흠... 요약하면 데이터를 불러오는 속도가 빨라진다고 한다.
13.3 입력 특성 전처리
간단하게 데이터를 표준화 하고 싶다면? keras.layers.Normalization 층을 사용 가능.
범주형 특성에 관해 살펴보자.
13.3.1 원-핫 벡터를 사용해 범주형 특성 인코딩하기
만약 변수 중에 'ㄱ,ㄴ,ㄷ,ㄹ,ㅁ' 를 값으로 가진 변수가 있다고 생각하자. 이 특성을 신경망에 주입하기 전에 인코딩 해야 함.
범주 개수가 작으면 원-핫 인코딩 사용 가능..
룩업 테이블을 사용해 각 범주를 인덱스로 매핑!
vocab=['ㄱ','ㄴ','ㄷ','ㄹ','ㅁ']#어휘사전 정의 indices=tf.range(len(vocab),dtype=tf.int64)# 범주에 해당하는 인덱스의 텐서 만듬 table_init=tf.lookup.KeyValueTensorInitializer(vocab,indices) #사전과 인덱스를 전달하여 초기화 객체(?)를 만듬 num_oov_buckets=2 #사전에 없는 범주를 찾으면 인덱스 다음 숫자부터 할당 table=tf.lookup.StaticVocabularyTable(table_init,num_oov_buckets)
알려지지 않은 범주가 많을수록 더 많은 oov 버킷을 사용해야 함.
categories=tf.constant(['ㄴ','ㄱ','ㄷ']) cat_indices=table.lookup(categories) cat_one_hot=tf.one_hot(cat_indices,depth=len(vocab)+num_oov_buckets)
하지만... 이는 keras.layers.TextVectorization 층으로 할수 있는 것....^^
어휘 사전이 크면 임베딩을 사용해 인코딩!
'[도서완독]Hands On Machine Learning' 카테고리의 다른 글
[HandsOn]14. 합성곱 신경망을 사용한 컴퓨터 비전 - 내용 정리1 (0) 2022.08.01 [HandsOn]13. 텐서플로에서 데이터 적재와 전처리하기 - 연습문제 (0) 2022.07.29 [HandsOn]13. 텐서플로에서 데이터 적재와 전처리하기 - 내용 정리1 (0) 2022.07.26 [HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 연습문제 풀이 (0) 2022.07.21 [HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 내용 정리 2 (0) 2022.07.20