עזרה להגן על שונית המחסום הגדולה עם TensorFlow על Kaggle הצטרפו אתגר

סיווג תמונות עם יוצר הדוגמניות TensorFlow Lite

צפה ב- TensorFlow.org הפעל ב- Google Colab צפה במקור ב- GitHub הורד מחברת ראה דגם TF Hub

ספריית Maker דגם לייט TensorFlow מפשטת את תהליך התאמת המרת מודל TensorFlow עצבית-רשת נתון קלט מסוימים כאשר פריסת המודל הזה עבור יישומי ML על-התקן.

מחברת זו מציגה דוגמה מקצה לקצה שמשתמשת בספריית Model Maker זו כדי להמחיש את ההתאמה וההמרה של מודל סיווג תמונות נפוץ לסיווג פרחים במכשיר נייד.

תנאים מוקדמים

כדי להפעיל בדוגמה זו, ראשית עלינו להתקין מספר חבילות הנדרשים, כולל חבילת Maker דגם כי GitHub ריפו .

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 עם תיקיות תמונה משלכם. באשר להעלאת נתונים לקולב, תוכל למצוא את כפתור ההעלאה בסרגל הצד השמאלי המוצג בתמונה למטה עם המלבן האדום. נסה להעלות קובץ zip ולפתוח אותו. נתיב קובץ השורש הוא הנתיב הנוכחי.

העלה קובץ

אם אתה מעדיף שלא להעלות את התמונות שלך בענן, אתה יכול לנסות להפעיל את הספרייה מקומית בעקבות המדריך ב GitHub.

הפעל את הדוגמה

הדוגמה רק מורכבת מ -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()

png

שלב 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
_________________________________________________________________

שלב 3: הערך את המודל המותאם אישית

העריכו את תוצאת המודל, קבלו את האובדן והדיוק של המודל.

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

png

אם הדיוק אינו עומד בדרישת האפליקציה, אפשר להתייחס שימוש מתקדם לחקור חלופות כגון שינוי מודל גדול, התאמת פרמטרים הכשרה מחדש וכו '

שלב 4: ייצא למודל TensorFlow Lite

המרת המודל מאומן לפורמט מודל TensorFlow לייט עם מטה , כך שאתה יכול להשתמש מאוחר יותר ביישום ML על-התקן. קובץ התווית וקובץ ה- vocab מוטמעים במטא נתונים. שם הקובץ ברירת המחדל 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. הורד וקטור Feature תמונה כמודל הבסיס מרכזת TensorFlow. המודל המוגדר כברירת מחדל הוא EfficientNet-Lite0.
  3. הוספת ראש מסווג עם שכבה נשירה עם dropout_rate בין שכבת ראש הדגם טרום מאומן. ברירת המחדל dropout_rate היא ברירת המחדל dropout_rate ערך מן make_image_classifier_lib ידי TensorFlow Hub.
  4. עיבד מראש את נתוני הקלט הגולמיים. נכון לעכשיו, שלבי עיבוד מראש כולל נורמליזציה של הערך של כל פיקסל תמונה לסולם קלט מודל ושינוי גודל לגודל קלט מודל. יש EfficientNet-Lite0 הסקאלה קלט [0, 1] ואת גודל התמונה קלט [224, 224, 3] .
  5. הזן את הנתונים למודל המסווג. כברירת מחדל, את הפרמטרים אימונים כגון תקופות אימונים, גודל אצווה, לומד שיעור, המומנטום הם ערכי ברירת המחדל מ make_image_classifier_lib ידי TensorFlow Hub. רק ראש המסווג מאומן.

בחלק זה, אנו מתארים מספר נושאים מתקדמים, כולל מעבר למודל סיווג תמונות אחר, שינוי היפרפרמטרים של האימונים וכו '.

התאם אישית את הכמות שלאחר האימון במודל 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-לייט הם משפחה של מודלים לסיווג תמונה שעלולה להגיע לדיוק המדינה- of-אמנות מתאים למכשירים Edge. דגם ברירת המחדל הוא 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 מודל כדוגמה, נוכל להגדיר inception_v3_spec המהווה מושא image_classifier.ModelSpec ומכיל מפרט של מודל V3 Inception.

אנחנו צריכים לציין את שם הדגם name , כתובת האתר של המודל Hub TensorFlow uri . בינתיים, ערך ברירת המחדל של input_image_shape הוא [224, 224] . אנחנו צריכים לשנות את זה [299, 299] עבור דגם V3 Inception.

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 Inception.

השלבים הנותרים זהים לחלוטין ונוכל בסופו של דבר לקבל דגם InceptionV3 TensorFlow Lite מותאם אישית.

שנה דגם מותאם אישית משלך

אם היינו רוצים להשתמש במודל מנהג זה לא TensorFlow Hub, אנחנו צריכים ליצור ולייצא ModelSpec ב TensorFlow Hub.

ואז מתחילים להגדיר ModelSpec אובייקט כמו בתהליך הנ"ל.

שנה את היפרפרמטרים של האימון

אנחנו יכולים גם לשנות את hyperparameters אימונים כמו epochs , dropout_rate ו batch_size שיכול להשפיע על דיוק המודל. פרמטרי המודל שאתה יכול להתאים הם:

  • epochs : יותר מתקופות יכולות להשיג דיוק טוב יותר עד שהוא מתכנס אבל אימונים עבור תקופות רבות מדי עלולים להוביל overfitting.
  • dropout_rate : התעריף נשיר, להימנע overfitting. אף אחד כברירת מחדל.
  • batch_size : מספר דגימות להשתמש בצעד אחד האימונים. אף אחד כברירת מחדל.
  • validation_data : נתוני אימות. אם אין, מדלג על תהליך האימות. אף אחד כברירת מחדל.
  • train_whole_model : אם נכון, מודול Hub הוא אימן יחד עם שכבת סיווג על גבי. אחרת, רק לאמן את שכבת הסיווג העליונה. אף אחד כברירת מחדל.
  • learning_rate : שיעור הלמידה Base. אף אחד כברירת מחדל.
  • momentum : לצוף Python ומועבר האופטימיזציה. רק בשימוש כאשר use_hub_library הוא True. אף אחד כברירת מחדל.
  • shuffle : בוליאני, אם יש טרף הנתונים. שקר כברירת מחדל.
  • use_augmentation : הגדלת נתונים בוליאני, שימוש עבור מקדים. שקר כברירת מחדל.
  • use_hub_library : בוליאני, השימוש make_image_classifier_lib מרכזת tensorflow לחזור שוב על התבנית. צינור אימון זה יכול להשיג ביצועים טובים יותר עבור מערך נתונים מסובך עם קטגוריות רבות. נכון כברירת מחדל.
  • warmup_steps : מספר צעדי חימום עבור לוח זמני חימום על לימוד שיעור. אם אין, נעשה שימוש בברירות המחדל של התחממות המהוות את סך שלבי האימון בשני עידנים. רק בשימוש כאשר use_hub_library הוא False. אף אחד כברירת מחדל.
  • model_dir : אופציונאלי, המיקום של קבצים במחסום המודל. רק בשימוש כאשר use_hub_library הוא False. אף אחד כברירת מחדל.

פרמטרים אשר אין כברירת מחדל כמו epochs יקבלו את הפרמטרים מחדל בטון make_image_classifier_lib מספריית TensorFlow Hub או 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

קרא עוד

אתה יכול לקרוא שלנו סיווג תמונה למשל ללמוד פרטים טכניים. למידע נוסף, עיין ב: