촉촉한초코칩
딥러닝 모델 경량화 본문
1. 프루닝 (Pruning)
- 모델에서 중요하지 않은 뉴런, 가중치 제거
- 모델 크기를 줄이고 속도 향상
- 도구 : Tensorflow model optimization toolkit, PyTorch의 TorchScript 등
2. 양자화 (Quantization)
- 가중치와 활성화 값을 낮은 비트 정밀도로 표현
- 메모리 사용량을 줄이고 계산 속도 높임
- 도구 : Tensorflow lite, PyTorch의 Quantization API
3. 지식 증류 (Knowledge Distillation)
- 큰 모델의 지식을 작은 모델로 전이
- 작으 모델이 큰 모델의 성능을 유지할 수 있도록 함
- 도구 : Tensorflow, PyTorch
4. 경량화 모델 아키텍처 사용
- 경량화된 모델 아키텍처를 설계하거나 사용
- 처음부터 경량화된 모델을 사용
- 예시 : MobileNet, SqueezeNet, EfficientNet 등
5. 모델 압축 및 변환
- 모델 파일을 압축하고 Tensorflow lite나 ONNX와 같은 경량화된 형식으로 변환
- 파일 크기를 줄이고 배포 및 실행 용이
- 도구 : Tensorflow lite converter, ONXX 등
Tensorflow lite 코드
import tensorflow as tf
# 기존 TensorFlow 모델 로드
model = tf.keras.models.load_model('your_model.h5')
# TensorFlow Lite 변환기 생성
converter = tf.lite.TFLiteConverter.from_keras_model(model)
# 양자화 적용
converter.optimizations = [tf.lite.Optimize.DEFAULT]
# TFLite 모델로 변환
tflite_model = converter.convert()
# TFLite 모델 저장
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
PyTorch Mobile 코드
import torch
# 기존 PyTorch 모델 로드
model = torch.load('your_model.pth')
# TorchScript로 모델 변환
scripted_model = torch.jit.script(model)
# 양자화 적용
quantized_model = torch.quantization.quantize_dynamic(
scripted_model, {torch.nn.Linear}, dtype=torch.qint8
)
# TorchScript 모델 저장
quantized_model.save('model.pt')
모델 경량화 됐는지 확인하는 방법
1. 모델 크기 비교
import os
before_size = os.path.getsize('path_to_original_model.h5')
after_size = os.path.getsize('path_to_optimized_model.h5')
print(f"Original model size: {before_size} bytes")
print(f"Optimized model size: {after_size} bytes")
2. 성능 평가
from sklearn.metrics import accuracy_score
# Assuming you have X_test and y_test
original_model_accuracy = accuracy_score(y_test, original_model.predict(X_test))
optimized_model_accuracy = accuracy_score(y_test, optimized_model.predict(X_test))
print(f"Original model accuracy: {original_model_accuracy}")
print(f"Optimized model accuracy: {optimized_model_accuracy}")
3. 추론 시간 비교
import time
# Original model inference time
start_time = time.time()
original_model.predict(X_test)
original_inference_time = time.time() - start_time
# Optimized model inference time
start_time = time.time()
optimized_model.predict(X_test)
optimized_inference_time = time.time() - start_time
print(f"Original model inference time: {original_inference_time} seconds")
print(f"Optimized model inference time: {optimized_inference_time} seconds")
4. 메모리 사용량 비교
import tracemalloc
# Original model memory usage
tracemalloc.start()
original_model.predict(X_test)
original_memory = tracemalloc.get_traced_memory()
tracemalloc.stop()
# Optimized model memory usage
tracemalloc.start()
optimized_model.predict(X_test)
optimized_memory = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Original model memory usage: {original_memory}")
print(f"Optimized model memory usage: {optimized_memory}")
'Study > PBL' 카테고리의 다른 글
[혼공머신] Ch03 (0) | 2024.07.17 |
---|---|
[혼공머신] Ch01, 2 (2) | 2024.07.12 |
Deep Fake voice recognition (0) | 2024.07.11 |
Machine Learning 3 (0) | 2024.05.28 |
Machine Learning 2 (0) | 2024.05.27 |