TensorFlow Lite Model Maker ile görüntü sınıflandırma

TensorFlow.org'da görüntüleyin Google Colab'de çalıştırın Kaynağı GitHub'da görüntüleyin Defteri indirin TF Hub modeline bakın

TensorFlow Lite Model Maker kitaplığı , bu modeli cihaz üzerinde makine öğrenimi uygulamaları için dağıtırken bir TensorFlow sinir ağı modelini özel giriş verilerine uyarlama ve dönüştürme sürecini basitleştirir.

Bu defter, çiçekleri bir mobil cihazda sınıflandırmak için yaygın olarak kullanılan bir görüntü sınıflandırma modelinin uyarlanmasını ve dönüştürülmesini göstermek için bu Model Maker kitaplığını kullanan uçtan uca bir örneği göstermektedir.

Önkoşullar

Bu örneği çalıştırmak için, biz GitHub'dan o Modeli Üretici paketinin dahil olmak üzere birçok gerekli paketleri, yüklemeniz gerekir Repo .

pip install -q tflite-model-maker

Gerekli paketleri içe aktarın.

import os

import numpy as np

import tensorflow as tf
assert tf.__version__.startswith('2')

from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.config import ExportFormat
from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.image_classifier import DataLoader

import matplotlib.pyplot as plt
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/numba/core/errors.py:154: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)

Basit Uçtan Uca Örnek

Veri yolunu alın

Bu basit uçtan uca örnekle oynayabileceğiniz bazı görüntüler alalım. Model Maker için yüzlerce görüntü iyi bir başlangıç ​​olurken, daha fazla veri daha iyi doğruluk sağlayabilir.

Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
228818944/228813984 [==============================] - 2s 0us/step

image_path kendi görüntü klasörlerinizle değiştirebilirsiniz. Colab'a veri yüklemeye gelince, aşağıdaki resimde kırmızı dikdörtgenle gösterilen sol kenar çubuğunda yükleme düğmesini bulabilirsiniz. Bir zip dosyası yüklemeyi ve sıkıştırmayı açmayı deneyin. Kök dosya yolu, geçerli yoldur.

Dosya yükleme

Görüntülerinizi buluta yüklememeyi tercih ediyorsanız, GitHub'daki kılavuzu izleyerek kitaplığı yerel olarak çalıştırmayı deneyebilirsiniz.

Örneği çalıştırın

Örnek, aşağıda gösterildiği gibi, her biri genel sürecin bir adımını temsil eden 4 satır koddan oluşmaktadır.

Adım 1. Cihazdaki bir ML uygulamasına özgü giriş verilerini yükleyin. Eğitim verilerine ve test verilerine bölün.

data = DataLoader.from_folder(image_path)
train_data, test_data = data.split(0.9)
INFO:tensorflow:Load image with size: 3670, num_label: 5, labels: daisy, dandelion, roses, sunflowers, tulips.

Adım 2. TensorFlow modelini özelleştirin.

model = image_classifier.create(train_data)
INFO:tensorflow:Retraining the models...
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2 (HubKer (None, 1280)              3413024   
_________________________________________________________________
dropout (Dropout)            (None, 1280)              0         
_________________________________________________________________
dense (Dense)                (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:375: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
103/103 [==============================] - 12s 31ms/step - loss: 0.8568 - accuracy: 0.7797
Epoch 2/5
103/103 [==============================] - 4s 35ms/step - loss: 0.6462 - accuracy: 0.9020
Epoch 3/5
103/103 [==============================] - 4s 35ms/step - loss: 0.6186 - accuracy: 0.9190
Epoch 4/5
103/103 [==============================] - 3s 32ms/step - loss: 0.5984 - accuracy: 0.9217
Epoch 5/5
103/103 [==============================] - 4s 36ms/step - loss: 0.5853 - accuracy: 0.9336

Adım 3. Modeli değerlendirin.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 2s 39ms/step - loss: 0.6424 - accuracy: 0.8828

Adım 4. TensorFlow Lite modeline aktarın.

Burada, TensorFlow Lite modelini, model açıklamaları için bir standart sağlayan meta verilerle dışa aktarıyoruz. Etiket dosyası meta verilere gömülüdür. Varsayılan eğitim sonrası niceleme tekniği, görüntü sınıflandırma görevi için tam interger nicemlemedir.

Kendi kullanımınız için yükleme kısmıyla aynı şekilde sol kenar çubuğundan indirebilirsiniz.

model.export(export_dir='.')
INFO:tensorflow:Assets written to: /tmp/tmpagqtnzk2/assets
INFO:tensorflow:Assets written to: /tmp/tmpagqtnzk2/assets
WARNING:absl:For model inputs containing unsupported operations which cannot be quantized, the `inference_input_type` attribute will default to the original type.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmprk11gbxt/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmprk11gbxt/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite

Bu basit 4 adımdan sonra, TensorFlow Lite model dosyasını, görüntü sınıflandırma referans uygulamasında olduğu gibi cihaz üstü uygulamalarda da kullanabiliriz.

Ayrıntılı Süreç

Şu anda, görüntü sınıflandırması için önceden eğitilmiş modeller olarak EfficientNet-Lite * modelleri, MobileNetV2, ResNet50 gibi çeşitli modelleri destekliyoruz. Ancak bu kitaplığa yalnızca birkaç satır kodla önceden eğitilmiş yeni modeller eklemek çok esnektir.

Aşağıda, daha fazla ayrıntı göstermek için bu uçtan uca örnek adım adım açıklanmaktadır.

1. Adım: Cihaz Üzerindeki ML Uygulamasına Özgü Giriş Verilerini Yükleyin

Çiçek veri seti 5 sınıfa ait 3670 görüntü içerir. Veri kümesinin arşiv sürümünü indirin ve arşive kaldırın.

Veri kümesi aşağıdaki dizin yapısına sahiptir:

flower_photos
|__ daisy
    |______ 100080576_f52e8ee070_n.jpg
    |______ 14167534527_781ceb1b7a_n.jpg
    |______ ...
|__ dandelion
    |______ 10043234166_e6dd915111_n.jpg
    |______ 1426682852_e62169221f_m.jpg
    |______ ...
|__ roses
    |______ 102501987_3cdb8e5394_n.jpg
    |______ 14982802401_a3dfb22afb.jpg
    |______ ...
|__ sunflowers
    |______ 12471791574_bb1be83df4.jpg
    |______ 15122112402_cafa41934f.jpg
    |______ ...
|__ tulips
    |______ 13976522214_ccec508fe7.jpg
    |______ 14487943607_651e8062a1_m.jpg
    |______ ...
image_path = tf.keras.utils.get_file(
      'flower_photos.tgz',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      extract=True)
image_path = os.path.join(os.path.dirname(image_path), 'flower_photos')

Verileri yüklemek için DataLoader sınıfını kullanın.

from_folder() yöntemine gelince, klasörden veri yükleyebilir. Aynı sınıftaki resim verilerinin aynı alt dizinde olduğunu ve alt klasör adının sınıf adı olduğunu varsayar. Şu anda, JPEG kodlu resimler ve PNG kodlu resimler desteklenmektedir.

data = DataLoader.from_folder(image_path)
INFO:tensorflow:Load image with size: 3670, num_label: 5, labels: daisy, dandelion, roses, sunflowers, tulips.
INFO:tensorflow:Load image with size: 3670, num_label: 5, labels: daisy, dandelion, roses, sunflowers, tulips.

Eğitim verilerine (% 80), doğrulama verilerine (% 10, isteğe bağlı) ve test verilerine (% 10) bölün.

train_data, rest_data = data.split(0.8)
validation_data, test_data = rest_data.split(0.5)

Etiketli 25 resim örneği göster.

plt.figure(figsize=(10,10))
for i, (image, label) in enumerate(data.gen_dataset().unbatch().take(25)):
  plt.subplot(5,5,i+1)
  plt.xticks([])
  plt.yticks([])
  plt.grid(False)
  plt.imshow(image.numpy(), cmap=plt.cm.gray)
  plt.xlabel(data.index_to_label[label.numpy()])
plt.show()

png

Adım 2: TensorFlow Modelini Özelleştirin

Yüklenen verilere göre özel bir görüntü sınıflandırıcı modeli oluşturun. Varsayılan model EfficientNet-Lite0'dır.

model = image_classifier.create(train_data, validation_data=validation_data)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_1 (HubK (None, 1280)              3413024   
_________________________________________________________________
dropout_1 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:375: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
91/91 [==============================] - 6s 49ms/step - loss: 0.8756 - accuracy: 0.7689 - val_loss: 0.6990 - val_accuracy: 0.8551
Epoch 2/5
91/91 [==============================] - 4s 45ms/step - loss: 0.6632 - accuracy: 0.8856 - val_loss: 0.6706 - val_accuracy: 0.8835
Epoch 3/5
91/91 [==============================] - 4s 45ms/step - loss: 0.6257 - accuracy: 0.9090 - val_loss: 0.6627 - val_accuracy: 0.8920
Epoch 4/5
91/91 [==============================] - 4s 46ms/step - loss: 0.6064 - accuracy: 0.9214 - val_loss: 0.6562 - val_accuracy: 0.8920
Epoch 5/5
91/91 [==============================] - 4s 47ms/step - loss: 0.5894 - accuracy: 0.9303 - val_loss: 0.6510 - val_accuracy: 0.8892

Ayrıntılı model yapısına bir göz atın.

model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_1 (HubK (None, 1280)              3413024   
_________________________________________________________________
dropout_1 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________

3. Adım: Özelleştirilmiş Modeli Değerlendirin

Modelin sonucunu değerlendirin, modelin kaybını ve doğruluğunu alın.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 24ms/step - loss: 0.5999 - accuracy: 0.9292

Öngörülen sonuçları 100 test görüntüsünde çizebiliriz. Kırmızı renkli tahmin edilen etiketler yanlış tahmin edilen sonuçlar iken diğerleri doğrudur.

# A helper function that returns 'red'/'black' depending on if its two input
# parameter matches or not.
def get_label_color(val1, val2):
  if val1 == val2:
    return 'black'
  else:
    return 'red'

# Then plot 100 test images and their predicted labels.
# If a prediction result is different from the label provided label in "test"
# dataset, we will highlight it in red color.
plt.figure(figsize=(20, 20))
predicts = model.predict_top_k(test_data)
for i, (image, label) in enumerate(test_data.gen_dataset().unbatch().take(100)):
  ax = plt.subplot(10, 10, i+1)
  plt.xticks([])
  plt.yticks([])
  plt.grid(False)
  plt.imshow(image.numpy(), cmap=plt.cm.gray)

  predict_label = predicts[i][0][0]
  color = get_label_color(predict_label,
                          test_data.index_to_label[label.numpy()])
  ax.xaxis.label.set_color(color)
  plt.xlabel('Predicted: %s' % predict_label)
plt.show()

png

Doğruluk uygulama gereksinimini karşılamıyorsa, daha büyük bir modele geçmek, yeniden eğitim parametrelerini ayarlamak gibi alternatifleri keşfetmek için Gelişmiş Kullanım'a başvurulabilir.

Adım 4: TensorFlow Lite Modeline Aktarın

Eğitimli modeli meta verilerle TensorFlow Lite model biçimine dönüştürün, böylece daha sonra bir cihaz üzerindeki makine öğrenimi uygulamasında kullanabilirsiniz. Etiket dosyası ve sözcük dosyası meta verilere yerleştirilmiştir. Varsayılan TFLite dosya adı model.tflite .

Birçok cihaz üzerinde makine öğrenimi uygulamasında, model boyutu önemli bir faktördür. Bu nedenle, modeli küçültmek ve potansiyel olarak daha hızlı çalışması için nicelleştirmeniz önerilir. Varsayılan eğitim sonrası niceleme tekniği, görüntü sınıflandırma görevi için tam interger nicemlemedir.

model.export(export_dir='.')
INFO:tensorflow:Assets written to: /tmp/tmp2s_q22rj/assets
INFO:tensorflow:Assets written to: /tmp/tmp2s_q22rj/assets
WARNING:absl:For model inputs containing unsupported operations which cannot be quantized, the `inference_input_type` attribute will default to the original type.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmpo2h6s5wc/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpo2h6s5wc/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite

TensorFlow Lite modelinin mobil uygulamalara nasıl entegre edileceği hakkında daha fazla ayrıntı için örnek uygulamalara ve görüntü sınıflandırma kılavuzlarına bakın.

Bu model, TensorFlow Lite Görev Kitaplığı'nın ImageClassifier API'si kullanılarak bir Android veya iOS uygulamasına entegre edilebilir.

İzin verilen dışa aktarma biçimleri aşağıdakilerden biri veya bir listesi olabilir:

Varsayılan olarak, yalnızca TensorFlow Lite modelini meta verilerle dışa aktarır. Ayrıca, farklı dosyaları seçerek dışa aktarabilirsiniz. Örneğin, yalnızca etiket dosyasını aşağıdaki gibi dışa aktarın:

model.export(export_dir='.', export_format=ExportFormat.LABEL)
INFO:tensorflow:Saving labels in ./labels.txt
INFO:tensorflow:Saving labels in ./labels.txt

Tflite modelini eval_tflite yöntemiyle de evaluate_tflite .

model.evaluate_tflite('model.tflite', test_data)
{'accuracy': 0.9318801089918256}

Gelişmiş Kullanım

create işlevi, bu kitaplığın kritik bir parçasıdır. Öğreticiye benzer önceden eğitilmiş bir modelle transfer öğrenmeyi kullanır.

create işlevi aşağıdaki adımları içerir:

  1. Verileri, parametre validation_ratio ve test_ratio göre eğitim, doğrulama, test verilerine test_ratio . validation_ratio ve test_ratio varsayılan değerleri 0.1 ve 0.1 .
  2. TensorFlow Hub'dan temel model olarak bir Görüntü Özellik Vektörü indirin. Varsayılan önceden eğitilmiş model EfficientNet-Lite0'dır.
  3. dropout_rate katmanı ile önceden eğitilmiş model arasına dropout_rate olan bir Bırakma Katmanı ile bir sınıflandırıcı başlığı ekleyin. Varsayılan dropout_rate hızı , TensorFlow Hub tarafından make_image_classifier_lib'deki varsayılan dropout_rate değeridir.
  4. Ham giriş verilerini önceden işleyin. Şu anda, giriş ölçeğini modellemek için her görüntü pikselinin değerini normalleştirme ve onu model giriş boyutuna yeniden boyutlandırma dahil olmak üzere ön işleme adımları. EfficientNet-Lite0, giriş ölçeğine [0, 1] ve giriş görüntü boyutuna [224, 224, 3] .
  5. Verileri sınıflandırıcı modeline besleyin. Varsayılan olarak, bu tür eğitim devirlerin, seri boyutu, öğrenme hızı, ivme olarak eğitim parametreleri varsayılan değerlerdir make_image_classifier_lib TensorFlow Hub tarafından. Yalnızca sınıflandırıcı kafası eğitilir.

Bu bölümde, farklı bir görüntü sınıflandırma modeline geçme, eğitim hiperparametrelerini değiştirme vb. Dahil olmak üzere birkaç gelişmiş konu açıklıyoruz.

TensorFLow Lite modelinde eğitim sonrası nicemlemeyi özelleştirin

Eğitim sonrası niceleme , model boyutunu ve çıkarım gecikmesini azaltabilen, aynı zamanda CPU ve donanım hızlandırıcı çıkarım hızını model doğruluğunda küçük bir bozulma ile iyileştirebilen bir dönüştürme tekniğidir. Bu nedenle, modeli optimize etmek için yaygın olarak kullanılır.

Model Maker kitaplığı, modeli dışa aktarırken varsayılan bir eğitim sonrası niceleme tekniği uygular. Eğitim sonrası nicelemeyi özelleştirmek istiyorsanız Model Maker, QuantizationConfig kullanarak birden fazla eğitim sonrası niceleme seçeneğini destekler. Örnek olarak float16 nicemlemeyi alalım. İlk olarak, niceleme yapılandırmasını tanımlayın.

config = QuantizationConfig.for_float16()

Ardından TensorFlow Lite modelini böyle bir konfigürasyonla dışa aktarıyoruz.

model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)
INFO:tensorflow:Assets written to: /tmp/tmpalsh2f4f/assets
INFO:tensorflow:Assets written to: /tmp/tmpalsh2f4f/assets
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmpjwujjf3x/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpjwujjf3x/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model_fp16.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model_fp16.tflite

model_fp16.tflite adlı modeli sol kenar çubuğundan, yukarıda belirtilen yükleme kısmıyla aynı şekilde indirebilirsiniz.

Modeli değiştir

Bu kitaplıkta desteklenen modele geçin.

Bu kütüphane, EfficientNet-Lite modellerini, MobileNetV2, ResNet50'yi şimdiye kadar desteklemektedir. EfficientNet-Lite , son teknoloji doğruluğa ulaşabilen ve Edge cihazları için uygun bir görüntü sınıflandırma modelleri ailesidir. Varsayılan model EfficientNet-Lite0'dır.

Biz sadece parametre ayarlayarak MobileNetV2 modeli geçiş olabilir model_spec içinde MobileNetV2 modeli şartnamesine create yöntemi.

model = image_classifier.create(train_data, model_spec=model_spec.get('mobilenet_v2'), validation_data=validation_data)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              2257984   
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 2,264,389
Trainable params: 6,405
Non-trainable params: 2,257,984
_________________________________________________________________
None
Epoch 1/5
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:375: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
91/91 [==============================] - 7s 50ms/step - loss: 0.9188 - accuracy: 0.7565 - val_loss: 0.7582 - val_accuracy: 0.8409
Epoch 2/5
91/91 [==============================] - 4s 45ms/step - loss: 0.6916 - accuracy: 0.8712 - val_loss: 0.7522 - val_accuracy: 0.8608
Epoch 3/5
91/91 [==============================] - 4s 48ms/step - loss: 0.6505 - accuracy: 0.9062 - val_loss: 0.7361 - val_accuracy: 0.8580
Epoch 4/5
91/91 [==============================] - 4s 46ms/step - loss: 0.6184 - accuracy: 0.9210 - val_loss: 0.7362 - val_accuracy: 0.8636
Epoch 5/5
91/91 [==============================] - 4s 47ms/step - loss: 0.6006 - accuracy: 0.9313 - val_loss: 0.7257 - val_accuracy: 0.8636

Test verilerinin doğruluğunu ve kaybını görmek için yeni yeniden eğitilmiş MobileNetV2 modelini değerlendirin.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 32ms/step - loss: 0.6459 - accuracy: 0.9019

TensorFlow Hub'da modele geçin

Ayrıca, TensorFlow Hub formatıyla bir görüntü girip bir özellik vektörü çıkaran diğer yeni modellere de geçebiliriz.

Örnek olarak Inception V3 modeli olarak, image_classifier.ModelSpec'in bir nesnesi olan ve Inception V3 modelinin özelliklerini içeren inception_v3_spec tanımlayabiliriz.

Biz model adı belirtmeniz gerekir name , TensorFlow Hub modeli url uri . Bu arada, input_image_shape varsayılan değeri [224, 224] . Inception V3 modeli için bunu [299, 299] olarak değiştirmemiz gerekiyor.

inception_v3_spec = image_classifier.ModelSpec(
    uri='https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1')
inception_v3_spec.input_image_shape = [299, 299]

Ardından, ayarı tarafından parametre model_spec için inception_v3_spec içinde create yöntemi, biz Inception V3 modelinin yeniden eğitmek olabilir.

Kalan adımlar tamamen aynı ve sonunda özelleştirilmiş bir InceptionV3 TensorFlow Lite modeli elde edebiliriz.

Kendi özel modelinizi değiştirin

TensorFlow Hub'da olmayan özel modeli kullanmak istiyorsak, ModelSpec'i TensorFlow Hub'da oluşturmalı ve dışa aktarmalıyız .

Ardından yukarıdaki işlem gibi ModelSpec nesnesini tanımlamaya ModelSpec .

Eğitim hiper parametrelerini değiştirin

Biz de böyle bir eğitim hyperparameters değiştirebilecek epochs , dropout_rate ve batch_size modeli doğruluğunu etkileyebilir. Ayarlayabileceğiniz model parametreleri şunlardır:

  • epochs : Daha fazla çağ, yakınsayıncaya kadar daha iyi doğruluk elde edebilir, ancak çok fazla dönem için eğitim aşırı uyuma neden olabilir.
  • dropout_rate : Bırakma oranı, aşırı uymaktan kaçının. Varsayılan olarak hiçbiri.
  • batch_size : bir eğitim adımında kullanılacak örnek sayısı. Varsayılan olarak hiçbiri.
  • validation_data : Doğrulama verileri. Yok ise, doğrulama sürecini atlar. Varsayılan olarak hiçbiri.
  • train_whole_model : train_whole_model , Hub modülü üstteki sınıflandırma katmanı ile birlikte eğitilir. Aksi takdirde, yalnızca en üst sınıflandırma katmanını eğitin. Varsayılan olarak hiçbiri.
  • learning_rate : Temel öğrenme oranı. Varsayılan olarak hiçbiri.
  • momentum : optimize ediciye iletilen bir Python kayan nokta. Yalnızca use_hub_library True olduğunda kullanılır. Varsayılan olarak hiçbiri.
  • shuffle : Boolean, verilerin karıştırılıp karıştırılmayacağı. Varsayılan olarak yanlış.
  • use_augmentation : Boolean, önişleme için veri use_augmentation kullanın. Varsayılan olarak yanlış.
  • use_hub_library : Boolean, kullanım make_image_classifier_lib tensorflow göbekten modelini yeniden eğitmek. Bu eğitim hattı, birçok kategoriye sahip karmaşık veri kümeleri için daha iyi performans sağlayabilir. Varsayılan olarak doğrudur.
  • warmup_steps : Öğrenme oranındaki ısınma programı için ısınma adımlarının sayısı. Yok ise, iki dönemdeki toplam eğitim adımları olan varsayılan ısınma_adımları kullanılır. Yalnızca use_hub_library False olduğunda kullanılır. Varsayılan olarak hiçbiri.
  • model_dir : İsteğe bağlı, model kontrol noktası dosyalarının konumu. Yalnızca use_hub_library False olduğunda kullanılır. Varsayılan olarak hiçbiri.

Gibi varsayılan olarak Yok olan parametreler epochs somut varsayılan parametreleri alacak make_image_classifier_lib TensorFlow Hub kütüphane ya gelen train_image_classifier_lib .

Örneğin, daha fazla çağla eğitim yapabiliriz.

model = image_classifier.create(train_data, validation_data=validation_data, epochs=10)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_3 (HubK (None, 1280)              3413024   
_________________________________________________________________
dropout_3 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/10
91/91 [==============================] - 6s 50ms/step - loss: 0.8710 - accuracy: 0.7682 - val_loss: 0.6951 - val_accuracy: 0.8722
Epoch 2/10
91/91 [==============================] - 4s 46ms/step - loss: 0.6585 - accuracy: 0.8925 - val_loss: 0.6643 - val_accuracy: 0.8807
Epoch 3/10
91/91 [==============================] - 4s 48ms/step - loss: 0.6215 - accuracy: 0.9131 - val_loss: 0.6533 - val_accuracy: 0.8835
Epoch 4/10
91/91 [==============================] - 4s 45ms/step - loss: 0.6021 - accuracy: 0.9186 - val_loss: 0.6467 - val_accuracy: 0.8864
Epoch 5/10
91/91 [==============================] - 4s 47ms/step - loss: 0.5890 - accuracy: 0.9320 - val_loss: 0.6461 - val_accuracy: 0.8835
Epoch 6/10
91/91 [==============================] - 4s 42ms/step - loss: 0.5758 - accuracy: 0.9399 - val_loss: 0.6411 - val_accuracy: 0.8864
Epoch 7/10
91/91 [==============================] - 4s 42ms/step - loss: 0.5676 - accuracy: 0.9475 - val_loss: 0.6367 - val_accuracy: 0.8949
Epoch 8/10
91/91 [==============================] - 4s 42ms/step - loss: 0.5614 - accuracy: 0.9485 - val_loss: 0.6369 - val_accuracy: 0.8920
Epoch 9/10
91/91 [==============================] - 4s 42ms/step - loss: 0.5536 - accuracy: 0.9536 - val_loss: 0.6397 - val_accuracy: 0.8920
Epoch 10/10
91/91 [==============================] - 4s 42ms/step - loss: 0.5489 - accuracy: 0.9550 - val_loss: 0.6385 - val_accuracy: 0.8977

Yeni yeniden eğitilmiş modeli 10 eğitim dönemi ile değerlendirin.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 24ms/step - loss: 0.5883 - accuracy: 0.9428

Devamını oku

Teknik detayları öğrenmek için resim sınıflandırma örneğimizi okuyabilirsiniz. Daha fazla bilgi için lütfen şu adrese bakın: