مؤتمر Google I / O هو التفاف! تابع جلسات TensorFlow اعرض الجلسات

تصنيف الصور باستخدام TensorFlow Lite Model Maker

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر انظر نموذج TF Hub

في مكتبة صانع TensorFlow لايت نموذج يبسط عملية تكييف وتحويل نموذج العصبية الشبكة TensorFlow لإدخال البيانات خاصة عند نشر هذا النموذج لتطبيقات ML على الجهاز.

يعرض هذا الكمبيوتر الدفتري مثالاً شاملاً يستخدم مكتبة Model Maker هذه لتوضيح تكييف وتحويل نموذج تصنيف صور شائع الاستخدام لتصنيف الزهور على جهاز محمول.

المتطلبات الأساسية

لتشغيل هذا المثال، نحن بحاجة أولا لتثبيت عدة حزم المطلوبة، بما في ذلك حزمة صانع نموذج أنه في جيثب الريبو .

pip install -q tflite-model-maker

استيراد الحزم المطلوبة.

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/pkg_resources/__init__.py:119: PkgResourcesDeprecationWarning: 0.18ubuntu0.18.04.1 is an invalid version and will not be supported in a future release
  PkgResourcesDeprecationWarning,
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/numba/core/errors.py:168: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)

مثال بسيط شامل

احصل على مسار البيانات

دعنا نلعب بعض الصور مع هذا المثال البسيط الشامل. تعد مئات الصور بداية جيدة لـ Model Maker بينما يمكن أن تحقق المزيد من البيانات دقة أفضل.

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

هل يمكن أن تحل محل image_path مع مجلدات الصور الخاصة بك. بالنسبة لتحميل البيانات إلى colab ، يمكنك العثور على زر التحميل في الشريط الجانبي الأيسر الموضح في الصورة أدناه مع المستطيل الأحمر. فقط حاول تحميل ملف مضغوط وفك ضغطه. مسار الملف الجذر هو المسار الحالي.

رفع ملف

إذا كنت تفضل عدم تحميل الصور الخاصة بك إلى سحابة، قد تتمكن من محاولة لتشغيل المكتبة محليا بعد دليل في جيثب.

قم بتشغيل المثال

يتكون المثال فقط من 4 أسطر من التعليمات البرمجية كما هو موضح أدناه ، كل منها يمثل خطوة واحدة من العملية الشاملة.

الخطوة 1. تحميل بيانات الإدخال الخاصة بتطبيق ML على الجهاز. قسّمها إلى بيانات التدريب وبيانات الاختبار.

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.

الخطوة 2. تخصيص نموذج TensorFlow.

model = image_classifier.create(train_data)
INFO:tensorflow:Retraining the models...
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/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
103/103 [==============================] - 7s 35ms/step - loss: 0.8551 - accuracy: 0.7718
Epoch 2/5
103/103 [==============================] - 4s 35ms/step - loss: 0.6503 - accuracy: 0.8956
Epoch 3/5
103/103 [==============================] - 4s 34ms/step - loss: 0.6157 - accuracy: 0.9196
Epoch 4/5
103/103 [==============================] - 3s 33ms/step - loss: 0.6036 - accuracy: 0.9293
Epoch 5/5
103/103 [==============================] - 4s 34ms/step - loss: 0.5929 - accuracy: 0.9317

الخطوة 3. تقييم النموذج.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 2s 40ms/step - loss: 0.6282 - accuracy: 0.9019

الخطوة 4. تصدير إلى نموذج TensorFlow Lite.

هنا، ونحن تصدير نموذج TensorFlow لايت مع التعريف الذي يوفر معيارا لتوصيف نموذج. يتم تضمين ملف التسمية في البيانات الوصفية. تقنية التكميم الافتراضية بعد التدريب هي تكميم عدد صحيح كامل لمهمة تصنيف الصور.

يمكنك تنزيله في الشريط الجانبي الأيسر مثل جزء التحميل لاستخدامك الخاص.

model.export(export_dir='.')
2021-11-02 11:34:05.568024: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
INFO:tensorflow:Assets written to: /tmp/tmpkqikzotp/assets
INFO:tensorflow:Assets written to: /tmp/tmpkqikzotp/assets
2021-11-02 11:34:09.488041: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 11:34:09.488090: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
fully_quantize: 0, inference_type: 6, input_inference_type: 3, output_inference_type: 3
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/tmpoblx4ed5/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpoblx4ed5/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite

بعد هذه 4 خطوات بسيطة، يمكن أن نزيد من استخدام ملف نموذج TensorFlow لايت في التطبيقات على الجهاز كما في الصورة تصنيف التطبيق المرجعية.

عملية مفصلة

حاليًا ، ندعم العديد من الطرز مثل نماذج EfficientNet-Lite * و MobileNetV2 و ResNet50 كنماذج مدربة مسبقًا لتصنيف الصور. لكن من المرن جدًا إضافة نماذج جديدة مدربة مسبقًا إلى هذه المكتبة ببضعة سطور من التعليمات البرمجية.

يسير التالي خلال هذا المثال الشامل خطوة بخطوة لإظهار المزيد من التفاصيل.

الخطوة 1: تحميل بيانات الإدخال الخاصة بتطبيق ML على الجهاز

تحتوي مجموعة بيانات الزهور على 3670 صورة تنتمي إلى 5 فئات. قم بتنزيل نسخة الأرشيف من مجموعة البيانات وفكها.

تحتوي مجموعة البيانات على بنية الدليل التالية:

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')

استخدام DataLoader فئة لتحميل البيانات.

أما بالنسبة from_folder() الأسلوب، فإنه يمكن تحميل البيانات من مجلد. يفترض أن بيانات الصورة من نفس الفئة موجودة في نفس الدليل الفرعي وأن اسم المجلد الفرعي هو اسم الفئة. حاليًا ، يتم دعم الصور المشفرة بتنسيق JPEG والصور المشفرة بتنسيق PNG.

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.

قم بتقسيمها إلى بيانات التدريب (80٪) ، وبيانات التحقق (10٪ ، اختياري) وبيانات الاختبار (10٪).

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

اعرض 25 صورة من أمثلة الصور مع التسميات.

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()

بي إن جي

الخطوة 2: تخصيص نموذج TensorFlow

قم بإنشاء نموذج مصنف مخصص للصور بناءً على البيانات المحملة. النموذج الافتراضي هو EfficientNet-Lite0.

model = image_classifier.create(train_data, validation_data=validation_data)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
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/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
91/91 [==============================] - 6s 54ms/step - loss: 0.8689 - accuracy: 0.7655 - val_loss: 0.6941 - val_accuracy: 0.8835
Epoch 2/5
91/91 [==============================] - 5s 50ms/step - loss: 0.6596 - accuracy: 0.8949 - val_loss: 0.6668 - val_accuracy: 0.8807
Epoch 3/5
91/91 [==============================] - 5s 50ms/step - loss: 0.6188 - accuracy: 0.9159 - val_loss: 0.6537 - val_accuracy: 0.8807
Epoch 4/5
91/91 [==============================] - 5s 52ms/step - loss: 0.6050 - accuracy: 0.9210 - val_loss: 0.6432 - val_accuracy: 0.8892
Epoch 5/5
91/91 [==============================] - 5s 52ms/step - loss: 0.5898 - accuracy: 0.9348 - val_loss: 0.6348 - val_accuracy: 0.8864

ألق نظرة على هيكل النموذج المفصل.

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
_________________________________________________________________

الخطوة الثالثة: تقييم النموذج المخصص

قم بتقييم نتيجة النموذج ، واحصل على فقد النموذج ودقته.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 27ms/step - loss: 0.6324 - accuracy: 0.8965

يمكننا رسم النتائج المتوقعة في 100 صورة اختبار. الملصقات المتنبأ بها باللون الأحمر هي نتائج خاطئة متوقعة بينما يكون البعض الآخر صحيحًا.

# 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()

بي إن جي

إذا لم دقة تلبية متطلبات التطبيق، يمكن للمرء أن يشير إلى الاستخدام المتقدم لاستكشاف بدائل مثل تغيير إلى نموذج أكبر، تعديل معايير إعادة تدريب الخ

الخطوة 4: تصدير إلى TensorFlow Lite Model

تحويل نموذج تدريبهم على شكل نموذج TensorFlow لايت مع التعريف بحيث يمكنك استخدامها لاحقا في تطبيق ML على الجهاز. يتم تضمين ملف التسمية وملف المفردات في البيانات الوصفية. اسم الملف TFLite الافتراضي هو model.tflite .

في العديد من تطبيقات ML على الجهاز ، يعد حجم النموذج عاملاً مهمًا. لذلك ، يوصى بتطبيق قياس النموذج لجعله أصغر ومن المحتمل أن يعمل بشكل أسرع. تقنية التكميم الافتراضية بعد التدريب هي تكميم عدد صحيح كامل لمهمة تصنيف الصور.

model.export(export_dir='.')
INFO:tensorflow:Assets written to: /tmp/tmp6tt5g8de/assets
INFO:tensorflow:Assets written to: /tmp/tmp6tt5g8de/assets
2021-11-02 11:35:40.254046: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 11:35:40.254099: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
fully_quantize: 0, inference_type: 6, input_inference_type: 3, output_inference_type: 3
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/tmpf601xty1/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpf601xty1/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite

رؤية التطبيقات سبيل المثال والأدلة من تصنيف الصور لمزيد من التفاصيل حول كيفية دمج نموذج TensorFlow لايت إلى تطبيقات الجوال.

هذا النموذج يمكن أن تكون متكاملة إلى الروبوت أو تطبيقات iOS باستخدام API ImageClassifier من مكتبة المهام لايت TensorFlow .

يمكن أن تكون تنسيقات التصدير المسموح بها واحدًا أو قائمة مما يلي:

بشكل افتراضي ، يقوم فقط بتصدير نموذج TensorFlow Lite ببيانات وصفية. يمكنك أيضًا تصدير ملفات مختلفة بشكل انتقائي. على سبيل المثال ، تصدير ملف التسمية فقط على النحو التالي:

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

يمكنك أيضا تقييم نموذج tflite مع evaluate_tflite الأسلوب.

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

الاستخدام المتقدم

و create وظيفة هي جزء هام من هذه المكتبة. ويستخدم التعلم نقل مع نموذج pretrained على غرار البرنامج التعليمي .

و create وظيفة تتضمن الخطوات التالية:

  1. تقسيم البيانات إلى التدريب، والتحقق من صحة، واختبار البيانات وفقا لمعلمة validation_ratio و test_ratio . القيمة الافتراضية validation_ratio و test_ratio هي 0.1 و 0.1 .
  2. تحميل ناقلات صورة ميزة كنموذج قاعدة من TensorFlow المحور. النموذج الافتراضي المدرب مسبقًا هو EfficientNet-Lite0.
  3. إضافة رأس المصنف مع طبقة التسرب مع dropout_rate بين طبقة الرأس ونموذج تدريب قبل. الافتراضي dropout_rate هو الافتراضي dropout_rate قيمة من make_image_classifier_lib التي كتبها TensorFlow المحور.
  4. المعالجة المسبقة لبيانات الإدخال الأولية. حاليًا ، خطوات المعالجة المسبقة بما في ذلك تسوية قيمة كل بكسل صورة لنموذج مقياس الإدخال وتغيير حجمه إلى حجم إدخال النموذج. EfficientNet-Lite0 يكون حجم المدخلات [0, 1] وحجم الصورة المدخلة [224, 224, 3] .
  5. تغذية البيانات في نموذج المصنف. افتراضيا، المعلمات التدريبية مثل التدريب العهود، حجم الدفعة، معدل التعلم، والزخم هي القيم الافتراضية من make_image_classifier_lib التي كتبها TensorFlow المحور. يتم تدريب رأس المصنف فقط.

في هذا القسم ، نصف العديد من الموضوعات المتقدمة ، بما في ذلك التبديل إلى نموذج تصنيف مختلف للصور ، وتغيير معلمات التدريب التشعبية ، إلخ.

قم بتخصيص تكميم ما بعد التدريب على نموذج TensorFLow Lite

تكميم بعد التدريب هو أسلوب التحويل التي يمكن أن تقلل من حجم النموذج والكمون الاستدلال، مع تحسين سرعة وحدة المعالجة المركزية ومسرع الأجهزة الاستدلال، مع القليل من تدهور في دقة النموذج. وبالتالي ، يتم استخدامه على نطاق واسع لتحسين النموذج.

تطبق مكتبة Model Maker تقنية تكمية افتراضية بعد التدريب عند تصدير النموذج. إذا كنت ترغب في تخصيص تكميم بعد التدريب، الة لصنع نموذج يدعم عدة خيارات ما بعد التدريب تكميم باستخدام QuantizationConfig كذلك. لنأخذ تكميم float16 كمثال. أولاً ، حدد تكوين التقسيم.

config = QuantizationConfig.for_float16()

ثم نقوم بتصدير نموذج TensorFlow Lite بهذا التكوين.

model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)
INFO:tensorflow:Assets written to: /tmp/tmpa528qeqj/assets
INFO:tensorflow:Assets written to: /tmp/tmpa528qeqj/assets
INFO:tensorflow:Label file is inside the TFLite model with metadata.
2021-11-02 11:43:43.724165: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 11:43:43.724219: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmpvlx_qa4j/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpvlx_qa4j/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model_fp16.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model_fp16.tflite

في Colab، يمكنك تحميل نموذج اسمه model_fp16.tflite من الشريط الجانبي الأيسر، نفس الجزء تحميل المذكورة أعلاه.

تغيير النموذج

قم بالتغيير إلى النموذج المدعوم في هذه المكتبة.

تدعم هذه المكتبة نماذج EfficientNet-Lite و MobileNetV2 و ResNet50 حتى الآن. EfficientNet لايت أسرة مكونة من نماذج تصنيف الصورة التي يمكن أن تحقق للدولة من الفن دقة ومناسبة لأجهزة الحافة. النموذج الافتراضي هو EfficientNet-Lite0.

نحن يمكن التبديل نموذج لMobileNetV2 فقط عن طريق وضع المعلمة model_spec لمواصفات نموذج MobileNetV2 في create الأسلوب.

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...
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/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
91/91 [==============================] - 8s 53ms/step - loss: 0.9163 - accuracy: 0.7634 - val_loss: 0.7789 - val_accuracy: 0.8267
Epoch 2/5
91/91 [==============================] - 4s 50ms/step - loss: 0.6836 - accuracy: 0.8822 - val_loss: 0.7223 - val_accuracy: 0.8551
Epoch 3/5
91/91 [==============================] - 4s 50ms/step - loss: 0.6506 - accuracy: 0.9045 - val_loss: 0.7086 - val_accuracy: 0.8580
Epoch 4/5
91/91 [==============================] - 5s 50ms/step - loss: 0.6218 - accuracy: 0.9227 - val_loss: 0.7049 - val_accuracy: 0.8636
Epoch 5/5
91/91 [==============================] - 5s 52ms/step - loss: 0.6092 - accuracy: 0.9279 - val_loss: 0.7181 - val_accuracy: 0.8580

قم بتقييم نموذج MobileNetV2 المعاد تدريبه حديثًا لمعرفة الدقة والخسارة في بيانات الاختبار.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 2s 35ms/step - loss: 0.6866 - accuracy: 0.8747

التغيير إلى النموذج في TensorFlow Hub

علاوة على ذلك ، يمكننا أيضًا التبديل إلى نماذج جديدة أخرى تقوم بإدخال صورة وإخراج متجه ميزة بتنسيق TensorFlow Hub.

كما التأسيس V3 نموذج كمثال، فإننا لا يمكن تحديد inception_v3_spec الذي هو كائن من image_classifier.ModelSpec ويحتوي على مواصفات نموذج التأسيس V3.

نحن بحاجة لتحديد اسم النموذج name ، عنوان الموقع من طراز TensorFlow محور uri . وفي الوقت نفسه، القيمة الافتراضية input_image_shape هو [224, 224] . نحن بحاجة إلى تغييره إلى [299, 299] لنموذج التأسيس V3.

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]

ثم، من خلال إعداد المعلمة model_spec إلى inception_v3_spec في create الأسلوب، نحن يمكن أن الإبقاء على النموذج التأسيس V3.

الخطوات المتبقية هي نفسها تمامًا ويمكننا الحصول على نموذج InceptionV3 TensorFlow Lite المخصص في النهاية.

تغيير النموذج المخصص الخاص بك

إذا كنا نرغب في استخدام نموذج مخصص هذا ليس في TensorFlow المحور، يجب أن نخلق وتصدير ModelSpec في TensorFlow المحور.

ثم البدء في تحديد ModelSpec كائن مثل عملية أعلاه.

قم بتغيير معلمات التدريب التشعبية

نحن يمكن أيضا تغيير hyperparameters التدريب مثل epochs ، dropout_rate و batch_size التي يمكن أن تؤثر على دقة النموذج. معلمات النموذج التي يمكنك ضبطها هي:

  • epochs : يمكن أن المزيد من العهود تحقيق أفضل دقة حتى يتقاطع لكن تدريبية لعدد كبير جدا من العهود قد يؤدي إلى overfitting.
  • dropout_rate : إن معدل التسرب، تجنب overfitting. لا شيء بشكل افتراضي.
  • batch_size : عدد العينات التي تستخدم في خطوة تدريبية واحدة. لا شيء بشكل افتراضي.
  • validation_data بيانات التحقق: إذا لم يكن هناك شيء ، يتخطى عملية التحقق. لا شيء بشكل افتراضي.
  • train_whole_model : إذا كان هذا صحيحا، يتم تدريب وحدة محور جنبا إلى جنب مع طبقة التصنيف على القمة. خلاف ذلك ، قم فقط بتدريب طبقة التصنيف العليا. لا شيء بشكل افتراضي.
  • learning_rate : معدل التعلم القاعدة. لا شيء بشكل افتراضي.
  • momentum : تعويم بيثون إحالتها إلى محسن. تستخدم فقط عندما use_hub_library غير صحيح. لا شيء بشكل افتراضي.
  • shuffle : منطقية، ما إذا كان ينبغي تعديلا البيانات. خطأ بشكل افتراضي.
  • use_augmentation : منطقية، وزيادة استخدام البيانات لتجهيزها. خطأ بشكل افتراضي.
  • use_hub_library : منطقية، واستخدام make_image_classifier_lib من مركز tensorflow الإبقاء على النموذج. يمكن لخط أنابيب التدريب هذا أن يحقق أداءً أفضل لمجموعة البيانات المعقدة ذات الفئات العديدة. صحيح بشكل افتراضي.
  • warmup_steps : عدد من الخطوات الودية للجدول الودية على معدل التعلم. إذا لم يكن هناك شيء ، فسيتم استخدام Warmup_steps الافتراضي وهو إجمالي خطوات التدريب في فترتين. تستخدم فقط عندما use_hub_library هو خطأ. لا شيء بشكل افتراضي.
  • model_dir : اختياري، وموقع ملفات نقطة تفتيش تابعة للنموذج. تستخدم فقط عندما use_hub_library هو خطأ. لا شيء بشكل افتراضي.

المعلمات والتي هي لا شيء افتراضيا مثل epochs سوف تحصل على المعلمات الافتراضية ملموسة في make_image_classifier_lib من مكتبة TensorFlow المحور أو train_image_classifier_lib .

على سبيل المثال ، يمكننا التدرب على المزيد من العصور.

model = image_classifier.create(train_data, validation_data=validation_data, epochs=10)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
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 53ms/step - loss: 0.8735 - accuracy: 0.7644 - val_loss: 0.6701 - val_accuracy: 0.8892
Epoch 2/10
91/91 [==============================] - 4s 49ms/step - loss: 0.6502 - accuracy: 0.8984 - val_loss: 0.6442 - val_accuracy: 0.8864
Epoch 3/10
91/91 [==============================] - 4s 49ms/step - loss: 0.6215 - accuracy: 0.9107 - val_loss: 0.6306 - val_accuracy: 0.8920
Epoch 4/10
91/91 [==============================] - 4s 49ms/step - loss: 0.5962 - accuracy: 0.9299 - val_loss: 0.6253 - val_accuracy: 0.8977
Epoch 5/10
91/91 [==============================] - 5s 52ms/step - loss: 0.5845 - accuracy: 0.9334 - val_loss: 0.6206 - val_accuracy: 0.9062
Epoch 6/10
91/91 [==============================] - 5s 50ms/step - loss: 0.5743 - accuracy: 0.9451 - val_loss: 0.6159 - val_accuracy: 0.9062
Epoch 7/10
91/91 [==============================] - 4s 48ms/step - loss: 0.5682 - accuracy: 0.9444 - val_loss: 0.6192 - val_accuracy: 0.9006
Epoch 8/10
91/91 [==============================] - 4s 49ms/step - loss: 0.5595 - accuracy: 0.9557 - val_loss: 0.6153 - val_accuracy: 0.9091
Epoch 9/10
91/91 [==============================] - 4s 47ms/step - loss: 0.5560 - accuracy: 0.9523 - val_loss: 0.6213 - val_accuracy: 0.9062
Epoch 10/10
91/91 [==============================] - 4s 45ms/step - loss: 0.5520 - accuracy: 0.9595 - val_loss: 0.6220 - val_accuracy: 0.8977

قم بتقييم النموذج الذي أعيد تدريبه حديثًا باستخدام 10 فترات تدريب.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 27ms/step - loss: 0.6417 - accuracy: 0.8883

اقرأ أكثر

يمكنك أن تقرأ لدينا صورة تصنيف سبيل المثال لمعرفة التفاصيل التقنية. لمزيد من المعلومات ، يرجى الرجوع إلى: