ref : https://www.tensorflow.org/model_optimization
ref : https://www.tensorflow.org/lite/performance/post_training_quantization
1.quantization
1.1 post-train quantization
1.1.1 Dynamic range quantization
- 용량만 줄이고 실제 동작 할때는 weight 를 다시 floating point 방식으로 변환하여
- 속도는 full integer quantization 에 비해 저하됨
1.1.2 full integer quantization
- model weight , input, activation 등 모두 quantization 작업을 통해 진행됨
- weight, bias 등은 constant 이기 때문에, 알아서 변한됨
- input, activation (output of activation layer) 의 경우 일종의 sample dataset 을 넣어주면 모델이 변환하는 과정에서 tensor 를 흘려보내면서 변환시키는 구조
- 그러므로 tflite 파일에는 모델의 sample input 을 통해 float32→int8 등으로 변환하는 관계식을 포함시킴
def representative_dataset():
yield [get_example_input() ]
def get_example_input():
my_data = np.genfromtxt('Arrhythmia.csv', delimiter=',')
# my_data = my_data[:,:]
ratio_konkuk = 500/5000
my_data = cv2.resize(my_data, None, fx=ratio_konkuk, fy=1, interpolation=cv2.INTER_AREA)
my_data = preprocessing.minmax_scale(my_data, axis=1)
my_data = my_data[:, :, np.newaxis]
my_data = np.array(my_data, dtype=np.float32)
return my_data
converter = tf.lite.TFLiteConverter.from_keras_model(loaded)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8 # or tf.uint8
converter.inference_output_type = tf.int8
2.Weight clustering
:model 의 weight 등을 비슷한 값 끼리 clustering 한형태로 저장함
cons : 정확도 감소
pros : weight 파일 용량 감소
3.Pruning method
: 필요없는 wegiht 또는 layer 등을 제거하는 방법
'Machine.Learning' 카테고리의 다른 글
siggraph 2024 - deeplearning 관련모음 (1) | 2024.09.05 |
---|---|
wandb 와 sweep를 이용한 AutoML (0) | 2023.07.19 |
rtx 3080 - ubuntu 20.04 개발환경 설치기 (0) | 2021.01.22 |
머신러닝 족보 ! scikit learn algorithm cheat sheet (0) | 2019.09.04 |
ML 환경 구축기 (e gpu 와 각종 드라이버 설치) (2) | 2019.04.16 |