1. 왜 데이터 API를 사용해야 하나요?
간단하며, 다양한 소스에서 데이터를 적재하거나 동시에 여러 소스에서 데이터를 읽고, 변환하고, 레코드를 교대로 처리하고, 데이터를 섞을 수 있습니다. 배치와 프리페치 기능도 제공하기때문.
2. 대용량 데이터셋을 여러 파일로 나누면 어떤 장점이 있나요?
큰 데이터셋을 다룰 수 있다. 또한 하나의 큰 파일보다 여러 작은 파일들이 다루기 쉽다. 예를 들어 여러개의 서브 세트로 나누기 쉽다.
또한 여러 대의 서버에 여러 파일로 데이터를 나누면 네트워크 대역폭을 효과적으로 활용할 수 있다.
3. 훈련 과정에서 입력 파이프라인의 병목을 어떻게 찾을 수 있나요? 어떻게 병목현상을 고칠 수 있나요?
텐서 보드를 활용해 프로파일링 데이터를 시각화해 찾을 수 있다.
GPU 가 완전히 활용되지 않고 병목현상이 있으면 스레드에서 동시에 데이터를 읽고 전처리하여 몇 개의 배치를 프리페치하여 해결할 수 있다.
이렇게 해도 100% 활용하지 못하면 전처리 코드를 최적화해볼 수 있다. 훈련하는 동안 동시에 전처리할 필요가 없다면 데이터 셋을 여러개의 TFRecord 파일로 저장하고 미리 전처리 수행가능하다.
4. 어떤 이진 데이터도 TFRecord 파일 또는 직렬화된 프로토콜 버퍼로 저장할 수 있나요?
네 , 하나의 TFRecord 파일은 임의의 이진 레코드의 시퀀스로 구성되기때문.
다양한 플랫폼과 언어에서 쉽게 읽을 수 있고 호환성을 유지하면서 프로토콜 정의를 업데이트할 수 있다.
5. 모든 데이터를 Example 프로토콜 버퍼 포맷으로 변환해야 하나요? 자신만의 프로토콜 버퍼 정의를 사용하는 것은 어떤가요?
Example 프로토콜 포맷은 텐서플로가 몇 가지 파싱 연산을 제공하므로 자신만의 포맷을 정의할 필요가 없다. 이 포맷은 아주 유연하기 때문에 대부분의 데이터셋에 있는 샘플을 정의할 필요가 없다.
하지만 포맷을 사용할 수 없는 경우라면 자신만의 프로토콜 버퍼정의를 사용한다. protoc 을 사용해컴파일하고 tf.io.decode_proto() 함수를 사용해 직렬화된 프로토콜 버퍼를 파싱한다.
6. TFRecord를 사용할 때 언제 압축을 사용하나요? 왜 기본적으로 압축을 사용하지 않나요?
파일 크기를 줄이고, 다운로드 시간을 줄이기 위해 일반적으로 압축을 활성화 한다. 하지만 파일이 훈련 스크립트와 같은 머신에 있다면, 압축을 해제하는데 cpu자원을 소모하지 않기 위해 압축을 하지 않는것이 좋다.
7. 데이터 파일을 작성할 때, 또는 tf.data 파이프라인 안에서, 모델의 전처리 층에서, TF 변환을 사용하여 데이터를 전처리할 수 있습니다. 각 방식의 장단점을 설명할 수 있나요?
- 데이터 파일을 작성할 때 데이터를 전처리하면 실시간으로 전처리를 수행할 필요가 없기 때문에 훈련 스크립트가 빨리 실행 될 것이다. -> 훨씬 작고, 다운로드 속도도 빨라진다.
단점은 전처리 로직을 실험하기 어렵고, 디스크 공간이 많이필요하고 생성 시간도 오래걸린다.- tf.data 파이프라인을 사용해 전처리를 하면 로직을 변경하고, 데이터 증식을 적용하기 훨씬 쉽다.
단점은 전처리 속도가 느려지고, 에포크 마다 훈련 샘플을 전처리 해야한다.- 모델이 전처리 층을 추가하면 훈련과 추론을 위해 딱 한 번만 전처리 코드를 작성하면 됩니다.
단점은 전처리 때문에 훈련 속도가 느려지고 훈련 샘플이 에포크마다 전처리된다. 또한 현재 전처리 연산이 GPU에서만 실행된다. 하지만 향후 케라스 전처리 층은 CPU에서도 가능.- TF 변환을 사용하면 앞선 방식의 장점을 많이 취할 수 있다. 전처리 데이터를 실제로 만들기 때문에 각 샘플이 한 번만 전처리된다(훈련 속도가 높아진다)
단점은 이 도구를 사용하는 방법을 따로 배워야 한다.
8. 범주형 특성을 인코딩 할 수 있는대표적인 방법을 나열해보세요. 텍스트 데이터는 어떻게 인코딩 할 수 있나요?
원 핫 인코딩을 사용할 수 있고 범주가 많다면 임베딩을 사용한다.
텍스트 데이터는 BoW 방법을 사용한다.
Comments