Google I / O là một kết quả hoàn hảo! Cập nhật các phiên TensorFlow Xem phiên

Phân loại hình ảnh với TensorFlow Lite Model Maker

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub Tải xuống sổ ghi chép Xem mô hình TF Hub

Các thư viện TensorFlow Lite mẫu maker đơn giản hoá quá trình thích ứng và chuyển đổi một mô hình mạng thần kinh TensorFlow nhập dữ liệu đặc biệt khi triển khai mô hình này cho các ứng dụng trên thiết bị ML.

Sổ tay này hiển thị một ví dụ từ đầu đến cuối sử dụng thư viện Trình tạo mô hình này để minh họa việc điều chỉnh và chuyển đổi mô hình phân loại hình ảnh thường được sử dụng để phân loại hoa trên thiết bị di động.

Điều kiện tiên quyết

Để chạy ví dụ này, trước tiên chúng ta cần phải cài đặt một số gói cần thiết, bao gồm mẫu gói Maker trong GitHub repo .

pip install -q tflite-model-maker

Nhập các gói cần thiết.

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)

Ví dụ về đầu cuối đơn giản

Lấy đường dẫn dữ liệu

Hãy lấy một số hình ảnh để chơi với ví dụ end-to-end đơn giản này. Hàng trăm hình ảnh là một khởi đầu tốt cho Model Maker trong khi nhiều dữ liệu hơn có thể đạt được độ chính xác tốt hơn.

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

Bạn có thể thay thế image_path với các thư mục hình ảnh của riêng bạn. Đối với việc tải dữ liệu lên cột, bạn có thể tìm thấy nút tải lên ở thanh bên trái được hiển thị trong hình bên dưới với hình chữ nhật màu đỏ. Chỉ cần thử tải lên một tệp zip và giải nén nó. Đường dẫn tệp gốc là đường dẫn hiện tại.

Cập nhật dử liệu

Nếu bạn không muốn tải lên hình ảnh của bạn lên đám mây, bạn có thể thử để chạy thư viện địa phương sau khi hướng dẫn trong GitHub.

Chạy ví dụ

Ví dụ chỉ bao gồm 4 dòng mã như hình dưới đây, mỗi dòng đại diện cho một bước của quy trình tổng thể.

Bước 1. Tải dữ liệu đầu vào cụ thể cho ứng dụng ML trên thiết bị. Chia nó thành dữ liệu đào tạo và dữ liệu thử nghiệm.

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.

Bước 2. Tùy chỉnh mô hình 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

Bước 3. Đánh giá mô hình.

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

Bước 4. Xuất sang mô hình TensorFlow Lite.

Ở đây, chúng tôi xuất khẩu mô hình TensorFlow Lite với siêu dữ liệu cung cấp một tiêu chuẩn cho giới thiệu mô hình. Tệp nhãn được nhúng trong siêu dữ liệu. Kỹ thuật lượng tử hóa sau đào tạo mặc định là lượng tử hóa số nguyên đầy đủ cho nhiệm vụ phân loại ảnh.

Bạn có thể tải xuống ở thanh bên trái giống như phần tải lên để sử dụng cho riêng bạn.

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

Sau những 4 bước đơn giản, chúng tôi tiếp tục có thể sử dụng tập tin mô hình TensorFlow Lite trong các ứng dụng trên thiết bị như trong hình ảnh phân loại ứng dụng tham khảo.

Quy trình chi tiết

Hiện tại, chúng tôi hỗ trợ một số mô hình như mô hình EfficientNet-Lite *, MobileNetV2, ResNet50 dưới dạng các mô hình được đào tạo trước để phân loại hình ảnh. Nhưng rất linh hoạt khi thêm các mô hình mới được đào tạo trước vào thư viện này chỉ với một vài dòng mã.

Phần sau sẽ đi qua từng bước ví dụ end-to-end này để hiển thị chi tiết hơn.

Bước 1: Tải dữ liệu đầu vào cụ thể cho ứng dụng ML trên thiết bị

Bộ dữ liệu hoa gồm 3670 hình ảnh thuộc 5 lớp. Tải xuống phiên bản lưu trữ của tập dữ liệu và gỡ bỏ nó.

Tập dữ liệu có cấu trúc thư mục sau:

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

Sử dụng DataLoader lớp để tải dữ liệu.

Đối với from_folder() phương pháp, nó có thể tải dữ liệu từ thư mục. Nó giả định rằng dữ liệu hình ảnh của cùng một lớp nằm trong cùng một thư mục con và tên thư mục con là tên lớp. Hiện tại, hình ảnh được mã hóa JPEG và hình ảnh được mã hóa PNG được hỗ trợ.

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.

Chia nó thành dữ liệu đào tạo (80%), dữ liệu xác thực (10%, tùy chọn) và dữ liệu thử nghiệm (10%).

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

Hiển thị 25 ví dụ hình ảnh với nhãn.

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

Bước 2: Tùy chỉnh mô hình TensorFlow

Tạo mô hình phân loại hình ảnh tùy chỉnh dựa trên dữ liệu đã tải. Mô hình mặc định là 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

Hãy xem cấu trúc mô hình chi tiết.

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
_________________________________________________________________

Bước 3: Đánh giá mô hình tùy chỉnh

Đánh giá kết quả của mô hình, lấy độ hao hụt và độ chính xác của mô hình.

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

Chúng tôi có thể vẽ các kết quả dự đoán trong 100 hình ảnh thử nghiệm. Các nhãn dự đoán có màu đỏ là kết quả dự đoán sai trong khi các nhãn khác đúng.

# 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

Nếu tính chính xác không đáp ứng các yêu cầu ứng dụng, người ta có thể tham khảo Cách sử dụng nâng cao để khám phá giải pháp thay thế như thay đổi sang một mô hình lớn hơn, điều chỉnh các thông số tái đào tạo vv

Bước 4: Xuất sang Mô hình TensorFlow Lite

Chuyển đổi mô hình đào tạo để định dạng mô hình TensorFlow Lite với siêu dữ liệu để bạn sau này có thể sử dụng trong một ứng dụng ML trên thiết bị. Tệp nhãn và tệp vocab được nhúng trong siêu dữ liệu. Các tên tập tin mặc định là TFLite model.tflite .

Trong nhiều ứng dụng ML trên thiết bị, kích thước mô hình là một yếu tố quan trọng. Do đó, bạn nên áp dụng lượng tử hóa mô hình để làm cho nó nhỏ hơn và có khả năng chạy nhanh hơn. Kỹ thuật lượng tử hóa sau đào tạo mặc định là lượng tử hóa số nguyên đầy đủ cho nhiệm vụ phân loại ảnh.

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

Xem các ứng dụng ví dụ và hướng dẫn phân loại hình ảnh để biết thêm chi tiết về làm thế nào để tích hợp các mô hình TensorFlow Lite vào ứng dụng di động.

Mô hình này có thể được tích hợp vào một Android hoặc ứng dụng iOS bằng cách sử dụng API ImageClassifier của TensorFlow Thư viện công tác Lite .

Các định dạng xuất được phép có thể là một hoặc một danh sách như sau:

Theo mặc định, nó chỉ xuất mô hình TensorFlow Lite với siêu dữ liệu. Bạn cũng có thể xuất các tệp khác nhau một cách có chọn lọc. Ví dụ: chỉ xuất tệp nhãn như sau:

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

Bạn cũng có thể đánh giá các mô hình tflite với evaluate_tflite phương pháp.

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

Sử dụng nâng cao

Các create chức năng là phần quan trọng của thư viện này. Nó sử dụng học tập chuyển giao với một mô hình pretrained tương tự như hướng dẫn .

Các create chức năng chứa các bước sau:

  1. Tách dữ liệu vào đào tạo, xác nhận, kiểm tra dữ liệu theo thông số validation_ratiotest_ratio . Giá trị mặc định của validation_ratiotest_ratio0.10.1 .
  2. Tải về một Vector Tính năng hình ảnh như mô hình cơ sở từ TensorFlow Hub. Mô hình được đào tạo trước mặc định là EfficientNet-Lite0.
  3. Thêm một đầu phân loại với một lớp với Dropout dropout_rate giữa lớp trưởng và mô hình pre-đào tạo. Giá trị mặc định dropout_rate là mặc định dropout_rate giá trị từ make_image_classifier_lib bởi TensorFlow Hub.
  4. Xử lý trước dữ liệu đầu vào thô. Hiện tại, các bước tiền xử lý bao gồm chuẩn hóa giá trị của mỗi pixel hình ảnh để mô hình hóa quy mô đầu vào và thay đổi kích thước nó thành kích thước đầu vào mô hình. EfficientNet-Lite0 có quy mô đầu vào [0, 1] và kích thước hình ảnh đầu vào [224, 224, 3] .
  5. Nạp dữ liệu vào mô hình phân loại. Theo mặc định, các thông số đào tạo như đào tạo kỷ nguyên, kích thước hàng loạt, tỷ lệ học tập, đà là những giá trị mặc định từ make_image_classifier_lib bởi TensorFlow Hub. Chỉ người đứng đầu bộ phân loại được đào tạo.

Trong phần này, chúng tôi mô tả một số chủ đề nâng cao, bao gồm chuyển sang mô hình phân loại hình ảnh khác, thay đổi siêu tham số đào tạo, v.v.

Tùy chỉnh lượng tử hóa Sau đào tạo trên mô hình TensorFLow Lite

Post-đào tạo lượng tử hóa là một kỹ thuật chuyển đổi có thể làm giảm kích thước mô hình và suy luận độ trễ, trong khi cũng cải thiện tốc độ CPU và tăng tốc phần cứng suy luận, với một suy thoái ít chính xác mô hình. Do đó, nó được sử dụng rộng rãi để tối ưu hóa mô hình.

Thư viện Model Maker áp dụng công nghệ lượng tử hóa sau đào tạo mặc định khi xuất mô hình. Nếu bạn muốn tùy chỉnh lượng tử sau đào tạo, Model Maker hỗ trợ nhiều tùy chọn sau đào tạo lượng tử sử dụng QuantizationConfig là tốt. Hãy lấy lượng tử hóa float16 làm ví dụ. Đầu tiên, xác định cấu hình lượng tử hóa.

config = QuantizationConfig.for_float16()

Sau đó, chúng tôi xuất mô hình TensorFlow Lite với cấu hình như vậy.

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

Trong Colab, bạn có thể tải về các mô hình tên model_fp16.tflite từ thanh bên trái, tương tự như các phần tải lên nêu trên.

Thay đổi mô hình

Thay đổi sang mô hình được hỗ trợ trong thư viện này.

Thư viện này hiện hỗ trợ các mô hình EfficientNet-Lite, MobileNetV2, ResNet50. EfficientNet-Lite là một gia đình của các mô hình phân loại hình ảnh mà có thể đạt được nhà nước-of-nghệ thuật chính xác và phù hợp cho các thiết bị Edge. Mô hình mặc định là EfficientNet-Lite0.

Chúng ta có thể chuyển đổi mô hình để MobileNetV2 bằng cách chỉ cần thiết lập thông số model_spec với mô hình đặc điểm kỹ thuật MobileNetV2 trong create phương pháp.

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

Đánh giá mô hình MobileNetV2 mới được đào tạo lại để xem độ chính xác và mất mát trong dữ liệu thử nghiệm.

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

Thay đổi mô hình trong TensorFlow Hub

Hơn nữa, chúng tôi cũng có thể chuyển sang các mô hình mới khác có đầu vào hình ảnh và xuất ra vectơ đặc trưng với định dạng TensorFlow Hub.

Như Inception V3 mô hình làm ví dụ, chúng ta có thể xác định inception_v3_spec đó là một đối tượng của image_classifier.ModelSpec và chứa các đặc điểm kỹ thuật của mô hình Inception V3.

Chúng ta cần phải ghi rõ tên model name , địa chỉ của các mô hình TensorFlow Hub uri . Trong khi đó, giá trị mặc định của input_image_shape[224, 224] . Chúng ta cần phải thay đổi nó để [299, 299] cho mô hình Inception 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]

Sau đó, bằng cách thiết lập thông số model_spec để inception_v3_spec trong create phương pháp, chúng ta có thể huấn luyện lại mẫu Inception V3.

Các bước còn lại hoàn toàn giống nhau và cuối cùng chúng ta có thể nhận được một mô hình InceptionV3 TensorFlow Lite tùy chỉnh.

Thay đổi mô hình tùy chỉnh của riêng bạn

Nếu chúng ta muốn sử dụng mô hình tùy chỉnh mà không có trong TensorFlow Hub, chúng ta nên tạo và xuất khẩu ModelSpec trong TensorFlow Hub.

Sau đó bắt đầu để xác định ModelSpec đối tượng như quá trình trên.

Thay đổi siêu tham số đào tạo

Chúng tôi cũng có thể thay đổi các siêu đào tạo như epochs , dropout_ratebatch_size mà có thể ảnh hưởng đến tính chính xác mô hình. Các thông số mô hình bạn có thể điều chỉnh là:

  • epochs : nhiều kỷ nguyên có thể đạt được độ chính xác tốt hơn cho đến khi nó hội tụ nhưng huấn luyện cho quá nhiều thời đại có thể dẫn đến overfitting.
  • dropout_rate : Tỷ lệ cho bỏ học, tránh overfitting. Không có theo mặc định.
  • batch_size : số lượng mẫu để sử dụng trong một bước đào tạo. Không có theo mặc định.
  • validation_data dữ liệu Validation:. Nếu Không, bỏ qua quá trình xác thực. Không có theo mặc định.
  • train_whole_model : Nếu đúng, các mô-đun Hub được đào tạo cùng với các lớp phân loại trên đầu trang. Nếu không, chỉ đào tạo lớp phân loại trên cùng. Không có theo mặc định.
  • learning_rate : tỷ lệ học cơ sở. Không có theo mặc định.
  • momentum : một phao Python chuyển tiếp đến tôi ưu hoa. Chỉ sử dụng khi use_hub_library là True. Không có theo mặc định.
  • shuffle : Boolean, cho dù dữ liệu cần được xáo trộn. Sai theo mặc định.
  • use_augmentation : Boolean, augmentation sử dụng dữ liệu cho tiền xử lý. Sai theo mặc định.
  • use_hub_library : Boolean, sử dụng make_image_classifier_lib từ trung tâm tensorflow phải đào tạo lại mô hình. Quy trình đào tạo này có thể đạt được hiệu suất tốt hơn đối với tập dữ liệu phức tạp với nhiều danh mục. Đúng theo mặc định.
  • warmup_steps : Số bước hâm lại cho mối chuyến bay hâm lại vào tốc độ học tập. Nếu Không có, thì warmup_steps mặc định được sử dụng, đây là tổng số các bước đào tạo trong hai kỷ nguyên. Chỉ sử dụng khi use_hub_library là False. Không có theo mặc định.
  • model_dir : Không bắt buộc, vị trí của các tập tin mô hình trạm kiểm soát. Chỉ sử dụng khi use_hub_library là False. Không có theo mặc định.

Thông số đó là Không theo mặc định như epochs sẽ nhận được các thông số mặc định cụ thể trong make_image_classifier_lib từ TensorFlow Hub thư viện hoặc train_image_classifier_lib .

Ví dụ, chúng tôi có thể đào tạo với nhiều kỷ nguyên hơn.

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

Đánh giá mô hình mới được đào tạo lại với 10 kỷ nguyên đào tạo.

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

Đọc thêm

Bạn có thể đọc chúng tôi phân loại hình ảnh ví dụ để học chi tiết kỹ thuật. Để biết thêm thông tin, vui lòng tham khảo: