![]() | ![]() | ![]() | ![]() |
TensorFlow Lite Model Maker kitaplığı, bu modeli cihaz üzerindeki makine öğrenimi uygulamaları için dağıtırken bir TensorFlow modelini özel giriş verilerine uyarlama ve dönüştürme sürecini basitleştirir.
Bu defter, bir mobil cihazdaki film incelemelerini sınıflandırmak için yaygın olarak kullanılan bir metin sınıflandırma modelinin uyarlanmasını ve dönüştürülmesini göstermek için Model Maker kitaplığını kullanan uçtan uca bir örnek göstermektedir. Metin sınıflandırma modeli, metni önceden tanımlanmış kategorilere ayırır. Bu öğreticide kullanılan veri kümesi, olumlu ve olumsuz film incelemeleridir.
Önkoşullar
Gerekli paketleri kurun
Bu örneği çalıştırmak için GitHub deposundan Model Maker paketi de dahil olmak üzere gerekli paketleri yükleyin.
pip install tflite-model-maker
Gerekli paketleri içe aktarın.
import numpy as np
import os
import tensorflow as tf
assert tf.__version__.startswith('2')
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker import TextClassifierDataLoader
Veri yolunu alın
Bu eğitici için veri kümesini indirin.
data_dir = tf.keras.utils.get_file(
fname='SST-2.zip',
origin='https://dl.fbaipublicfiles.com/glue/data/SST-2.zip',
extract=True)
data_dir = os.path.join(os.path.dirname(data_dir), 'SST-2')
Downloading data from https://dl.fbaipublicfiles.com/glue/data/SST-2.zip 7446528/7439277 [==============================] - 0s 0us/step
Bu öğretici üzerinde çalışmak için kendi veri kümenizi de yükleyebilirsiniz. Colab'de sol kenar çubuğunu kullanarak veri kümenizi yükleyin.
Veri kümenizi buluta yüklememeyi tercih ederseniz, kılavuzu izleyerek kütüphaneyi yerel olarak da çalıştırabilirsiniz.
Uçtan Uca İş Akışı
Bu iş akışı, aşağıda özetlendiği gibi beş adımdan oluşur:
Adım 1. Bir metin sınıflandırma modelini temsil eden bir model özelliği seçin.
Bu eğitimde örnek olarak MobileBERT kullanılmıştır.
spec = model_spec.get('mobilebert_classifier')
Adım 2. Cihazdaki bir ML uygulamasına özgü tren ve test verilerini yükleyin ve verileri belirli bir model_spec
göre önceden model_spec
.
train_data = TextClassifierDataLoader.from_csv(
filename=os.path.join(os.path.join(data_dir, 'train.tsv')),
text_column='sentence',
label_column='label',
model_spec=spec,
delimiter='\t',
is_training=True)
test_data = TextClassifierDataLoader.from_csv(
filename=os.path.join(os.path.join(data_dir, 'dev.tsv')),
text_column='sentence',
label_column='label',
model_spec=spec,
delimiter='\t',
is_training=False)
Adım 3. TensorFlow modelini özelleştirin.
model = text_classifier.create(train_data, model_spec=spec)
Adım 4. Modeli değerlendirin.
loss, acc = model.evaluate(test_data)
İle TensorFlow Lite modeli olarak 5. Dışa Adım meta veri .
MobileBERT, cihaz üzerindeki uygulamalar için çok büyük olduğundan, minimum performans düşüşüyle neredeyse 4 kat sıkıştırmak için model üzerinde dinamik aralık nicelemesini kullanın.
config = configs.QuantizationConfig.create_dynamic_range_quantization(optimizations=[tf.lite.Optimize.OPTIMIZE_FOR_LATENCY])
config.experimental_new_quantizer = True
model.export(export_dir='mobilebert/', quantization_config=config)
Modeli, Colab'deki sol kenar çubuğunu kullanarak da indirebilirsiniz.
Yukarıdaki 5 adımı yürüttükten sonra, TensorFlow Lite Görev Kitaplığı'ndaki BertNLClassifier API'yi kullanarak TensorFlow Lite model dosyasını cihaz üzerindeki uygulamalarda da kullanabilirsiniz.
Aşağıdaki bölümlerde, daha fazla ayrıntı göstermek için örnek adım adım açıklanmaktadır.
Metin Sınıflandırıcı için bir Modeli temsil eden bir model_spec
seçin
Her model_spec
nesnesi, metin sınıflandırıcı için belirli bir modeli temsil eder. TensorFlow Lite Model Maker şu anda MobileBERT'i , ortalama kelime düğünlerini ve BERT-Base modellerini desteklemektedir.
Desteklenen Model | Model_spec adı | Model Açıklaması |
---|---|---|
MobileBERT | "mobilebert_classifier" | Cihaz üstü uygulamalar için uygun rekabetçi sonuçlar elde ederken BERT-Base'den 4,3 kat daha küçük ve 5,5 kat daha hızlı. |
BERT Tabanı | "bert_classifier" | NLP görevlerinde yaygın olarak kullanılan standart BERT modeli. |
ortalama kelime gömme | "average_word_vec" | RELU aktivasyonu ile metin kelime düğünlerinin ortalaması. |
Bu eğitici, süreci göstermek için birden çok kez yeniden average_word_vec
daha küçük bir model olan average_word_vec
kullanır.
spec = model_spec.get('average_word_vec')
Cihazdaki ML Uygulamasına Özgü Giriş Verilerini Yükleme
SST-2 (Stanford Duyarlılık Treebank), GLUE kıyaslamasındaki görevlerden biridir. Eğitim için 67.349 film incelemesi ve doğrulama için 872 film incelemesi içerir. Veri kümesinin iki sınıfı vardır: olumlu ve olumsuz film incelemeleri.
Veri kümesinin arşivlenmiş sürümünü indirin ve çıkarın.
data_dir = tf.keras.utils.get_file(
fname='SST-2.zip',
origin='https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSST-2.zip?alt=media&token=aabc5f6b-e466-44a2-b9b4-cf6337f84ac8',
extract=True)
data_dir = os.path.join(os.path.dirname(data_dir), 'SST-2')
SST-2 veri kümesi vardır train.tsv
eğitim ve için dev.tsv
doğrulama için. Dosyalar aşağıdaki biçime sahiptir:
cümle | etiket |
---|---|
büyüleyici ve çoğu zaman yolculuğu etkiliyor. | 1 |
korkusuzca kasvetli ve çaresiz | 0 |
Olumlu bir inceleme 1 olarak etiketlenir ve olumsuz bir yorum 0 olarak etiketlenir.
Verileri yüklemek için TestClassifierDataLoader.from_csv
yöntemini kullanın.
train_data = TextClassifierDataLoader.from_csv(
filename=os.path.join(os.path.join(data_dir, 'train.tsv')),
text_column='sentence',
label_column='label',
model_spec=spec,
delimiter='\t',
is_training=True)
test_data = TextClassifierDataLoader.from_csv(
filename=os.path.join(os.path.join(data_dir, 'dev.tsv')),
text_column='sentence',
label_column='label',
model_spec=spec,
delimiter='\t',
is_training=False)
Model Maker kitaplığı, verileri yüklemek için from_folder()
yöntemini de destekler. Aynı sınıfın metin verilerinin aynı alt dizinde olduğunu ve alt klasör adının sınıf adı olduğunu varsayar. Her metin dosyası bir film inceleme örneği içerir. class_labels
parametresi, hangi alt klasörlerin olduğunu belirtmek için kullanılır.
TensorFlow Modelini Özelleştirin
Yüklenen verilere göre özel bir metin sınıflandırıcı modeli oluşturun.
model = text_classifier.create(train_data, model_spec=spec, epochs=10)
Ayrıntılı model yapısını inceleyin.
model.summary()
Özelleştirilmiş Modeli Değerlendirin
Modeli test verileri ile değerlendirin ve kaybını ve doğruluğunu alın.
loss, acc = model.evaluate(test_data)
TensorFlow Lite Modeli olarak dışa aktarın
Mevcut modeli, daha sonra cihaz üzerindeki bir makine öğrenimi uygulamasında kullanabileceğiniz meta verilerle TensorFlow Lite model formatına dönüştürün. Etiket dosyası ve sözcük dosyası meta verilere yerleştirilmiştir. Varsayılan TFLite dosya adı model.tflite
.
model.export(export_dir='average_word_vec/')
TensorFlow Lite model dosyası, TensorFlow Lite Görev Kitaplığı'ndaki NLClassifier API kullanılarak metin sınıflandırma referans uygulamasında kullanılabilir.
İzin verilen dışa aktarma biçimleri aşağıdakilerden biri veya bir listesi olabilir:
-
ExportFormat.TFLITE
-
ExportFormat.LABEL
-
ExportFormat.VOCAB
-
ExportFormat.SAVED_MODEL
Varsayılan olarak, yalnızca TensorFlow Lite modelini meta verilerle dışa aktarır. Ayrıca, farklı dosyaları seçmeli olarak dışa aktarabilirsiniz. Örneğin, yalnızca etiket dosyasını ve sözcük dosyasını aşağıdaki gibi dışa aktarın:
model.export(export_dir='average_word_vec/', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])
Doğruluğunu elde etmek için tflite modelini eval_tflite yöntemi ile evaluate_tflite
.
accuracy = model.evaluate_tflite('average_word_vec/model.tflite', test_data)
Gelişmiş Kullanım
create
fonksiyonu Modeli Üretici kütüphane kullandığı modelleri oluşturmak için o sürücü fonksiyonudur. model_spec
parametresi, model spesifikasyonunu tanımlar. AverageWordVecModelSpec
ve BertClassifierModelSpec
sınıfları şu anda desteklenmektedir. create
işlevi aşağıdaki adımlardan oluşur:
-
model_spec
göre metin sınıflandırıcı için model oluşturur. - Sınıflandırıcı modelini eğitir. Varsayılan dönemler ve varsayılan parti boyutu,
model_spec
nesnesindekidefault_training_epochs
vedefault_batch_size
değişkenleri tarafından ayarlanır.
Bu bölüm, modeli ayarlama ve hiperparametreleri eğitme gibi gelişmiş kullanım konularını kapsar.
Modeli ayarlayın
AverageWordVecModelSpec
sınıfındaki wordvec_dim
ve seq_len
değişkenleri gibi model altyapısını ayarlayabilirsiniz.
Örneğin, modeli daha büyük bir wordvec_dim
değeri ile wordvec_dim
. Modeli değiştirirseniz yeni bir model_spec
gerektiğini unutmayın.
new_model_spec = model_spec.AverageWordVecModelSpec(wordvec_dim=32)
Önceden işlenmiş verileri alın.
new_train_data = TextClassifierDataLoader.from_csv(
filename=os.path.join(os.path.join(data_dir, 'train.tsv')),
text_column='sentence',
label_column='label',
model_spec=new_model_spec,
delimiter='\t',
is_training=True)
Yeni modeli eğitin.
model = text_classifier.create(new_train_data, model_spec=new_model_spec)
Ayrıca MobileBERT modelini de ayarlayabilirsiniz.
Ayarlayabileceğiniz model parametreleri şunlardır:
-
seq_len
:seq_len
dizinin uzunluğu. -
initializer_range
: Tüm ağırlık matrislerini başlatmak içintruncated_normal_initializer
standart sapması. -
trainable
: Önceden eğitilmiş katmanın eğitilebilir olup olmadığını belirten Boole.
Ayarlayabileceğiniz eğitim hattı parametreleri şunlardır:
-
model_dir
: Model kontrol noktası dosyalarının konumu. Ayarlanmazsa, geçici bir dizin kullanılacaktır. -
dropout_rate
: Bırakma oranı. -
learning_rate
: Adam optimize edicinin ilk öğrenme oranı. -
tpu
: Bağlanılacak TPU adresi.
Örneğin, seq_len=256
(varsayılan 128) olarak ayarlayabilirsiniz. Bu, modelin daha uzun metni sınıflandırmasına izin verir.
new_model_spec = model_spec.get('mobilebert_classifier')
new_model_spec.seq_len = 256
Eğitim hiper parametrelerini ayarlayın
Sen ayar da yapabilirsiniz gibi eğitim hyperparameters epochs
ve batch_size
modeli doğruluğunu etkileyebilir. Örneğin,
-
epochs
: daha fazla epoch daha iyi doğruluk sağlayabilir, ancak aşırı uyuma neden olabilir. -
batch_size
: bir eğitim adımında kullanılacak örnek sayısı.
Örneğin, daha fazla dönemle antrenman yapabilirsiniz.
model = text_classifier.create(train_data, model_spec=spec, epochs=20)
Yeni yeniden eğitilmiş modeli 20 eğitim dönemi ile değerlendirin.
loss, accuracy = model.evaluate(test_data)
Model Mimarisini Değiştirin
model_spec
değiştirerek modeli değiştirebilirsiniz. Aşağıda BERT-Base modeline nasıl geçileceği gösterilmektedir.
Metin sınıflandırıcı için model_spec
BERT-Base modeline değiştirin.
spec = model_spec.get('bert_classifier')
Kalan adımlar aynı.