728x90
안녕하세요.
오늘은 Tesorflow 모델을 TFLite로 변환하는 예제를 진행하겠습니다.
우선, TFLite를 사용하는 이유는 On Device 환경에서 동작하게 하기위해 - IOS, AOS 같은 기기에 넣기위해 - 사용합니다.
따라서 TFLite로 변환한다면 모델사이즈가 줄어들게 됩니다. 이는 모델에서 기존에 학습된 가중치(weight)를 float32 형식에서 float 16 int 8 등의 형태로 변환시키기 때문에 추론 정확도가 떨어지게 됩니다. 대신 사이즈가 줄어든 만큼 추론속도는 증가할 것 입니다.
추가적으로, 추론속도가 증가하는 것이지 학습속도를 빠르게 하는 것이 아닙니다. 이부분을 염두해 두시고 진행하셔야 합니다.
이러한 과정을 '양자화 (quantizaion)' 한다고 합니다.
양자화 설정 타입은 크게 Dynamic range, Integer , Float 세가지가 있습니다.
Dynamic range와 Float은 가중치(weight)를 타겟으로 양자화 하고, Integer 는 가중치, 레이어 등을 양자화 타겟으로 합니다.
대표적인 변환타입은 Float이나 사용하는 모델이 어떤 연산을 지원하는지를 확인하신 후, 적용하셔야 합니다.
연산제한이 없다면, 사용한 대표 데이터셋이 있는지 데이터셋 확인을 하셔야 합니다.
이 예제에서는 Float16 연산으로 양자화를 진행하겠습니다.
import tensorflow as tf
#모델이 저장된 폴더 위치로 모델 불러오기
converter = tf.lite.TFLiteConverter.from_saved_model('변환할 모델이 있는 폴더경로')
# 양자화 설정
converter.target_spec.supported_types = [tf.float16]
converter.optimizations = [tf.lite.Optimize.DEFAULT]
# 모델 변환
tflite_model = converter.convert()
# 변환된 모델을 .tflite 파일에 저장
open("저장할경로/저장할 이름.tflite", "wb").write(tflite_model)
이렇게 진행하시면 아래 사진과 같이 변환이 완료됩니다.
'Python' 카테고리의 다른 글
[Python] Tensorflow 에서 모델 저장하고 불러오기 (0) | 2023.02.16 |
---|---|
[Python] pprint 모듈 사용해보기 (0) | 2023.02.03 |
[Python] Google Colab 에서 stable_diffusion 2 사용하기 (0) | 2023.01.19 |
[Python] Tensorflow로 나만의 데이터셋 만들기 (0) | 2023.01.18 |
[Python] pickle 모듈을 사용해서 직렬화, 역직렬화 하기 (0) | 2023.01.08 |