728x90
๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๊ฒฝ๋ํํ๋ ๊ฒ์ ๋ชจ๋ธ ํ์ต ์ดํ ์ค์ ๋ฌธ์ ์ ๋ฅ๋ฌ๋ ํด๋ฒ์ ์ ์ฉํ๋ ๊ณผ์ ์ ์์ด์ ์คํ ์๊ฐ, ์์ธก์ ํ์ํ ๋ฆฌ์์ค ์๋ชจ๋์ ์ค์ด๊ธฐ ์ํด์ ํ์ํ ๊ณผ์ ์ด๋ค.
๋ชจ๋ธ ๊ฒฝ๋ํ์๋ (๋ด๊ฐ ์๊ณ ์๊ธฐ๋ก๋) ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋๋ฐ,
- ๋ชจ๋ธ ์์ํ(๋นํธ ์๋ฅผ ์ค์ด๋ ๋ฐฉ์)
- ๋ชจ๋ธ pruning(์ค์ํ์ง ์์ ๋ถ๋ถ์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์)
- ๊ทธ๋ฅ ๋ชจ๋ธ ์ค๊ณ๋ฅผ ์ํ๊ธฐ
์ค์ ์ด๋ฏธ ํ์ตํ ๋ชจ๋ธ์ ์์ด์ ๊ฐ์ฅ ์ฌ์ด ์์ํ๋ฅผ ์ฐ์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค. Tensorflow ๊ธฐ๋ฐ์ ๋ชจ๋ธ์ ์์ํํ๋ ์์ ๋ฅผ ๊ธฐ๋กํด๋๋ค.
- Tensorflow๋ก ๊ตฌ์ฑ๋์ด ํ์ตํ๊ณ ๊ฐ์ค์น๋ฅผ
.h5
ํ์ฅ์๋ก ์ ์ฅํ ๋ชจ๋ธ
1. ๋ชจ๋ธ ์์ํ
a. ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
import tensorflow as tf
model = your_model(parameter)
model.load_weights('YOUR_MODEL_PATH')
b. ์์ํ
converter = tf.lite.TFLiteConverter.from_keras_model(model) # ๋ชจ๋ธ์ด ์ผ๋ผ์ค๋ก ๋น๋๋์ง ์์๋ค๋ฉด ๋ค๋ฅธ ๊ฒ ์ฌ์ฉ
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()
open("SAVE_PATH.tflite", "wb").write(tflite_quant_model) # write byte๋ก ์ ์ฅ
๋ง์ผ LSTM๊ณผ ๊ฐ์ ๋ ์ด์ด(๊ธฐ๋ณธ ์ง์ํ์ง ์๋ operator)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ ๋ด์ฉ์ convert
์ ์ ์ถ๊ฐ
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
2. ์์ํ ๋ ๋ชจ๋ธ ๋ก๋
a. interpreter ์ ์
import tensorflow as tf
interpreter = tf.lite.Interpreter('YOUR_MODEL_PATH')
interpreter.allocate_tensors()
input_detail = interpreter.get_input_details()
output_detail = interpreter.get_output_details()
b. ํ ์คํธ
interpreter.set_tensor(input_detail[0]['index'], data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_detail[0]['index'])
- ์์ํ ์ ํ์ผ ํฌ๊ธฐ
- ์์ํ ํ ํ์ผ ํฌ๊ธฐ
์์ํ ์ ํ ์ฑ๋ฅ ๋น๊ต
- ์์ํ ์
- F1 Score = 0.9703125 / Accuracy = 97.031 %
- ์์ํ ํ
- F1 Score = 0.9671875 | Accuracy = 96.719 %
์ฐธ๊ณ
https://medium.com/@jan_marcel_kezmann/master-the-art-of-quantization-a-practical-guide-e74d7aad24f9
728x90