TensorFlow Lite Model Maker를 사용한 이미지 분류

TensorFlow.org에서보기 Google Colab에서 실행 GitHub에서 소스보기 노트북 다운로드 TF Hub 모델보기

TensorFlow Lite Model Maker 라이브러리 는 기기 내 ML 애플리케이션 용으로이 모델을 배포 할 때 TensorFlow 신경망 모델을 특정 입력 데이터로 조정하고 변환하는 프로세스를 단순화합니다.

이 노트북은이 Model Maker 라이브러리를 활용하여 모바일 장치에서 꽃을 분류하기 위해 일반적으로 사용되는 이미지 분류 모델의 적응 및 변환을 설명하는 종단 간 예제를 보여줍니다.

전제 조건

이 예제를 실행하려면 먼저 GitHub repo에 있는 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/numba/core/errors.py:154: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)

간단한 종단 간 예제

데이터 경로 가져 오기

이 간단한 end-to-end 예제로 재생할 이미지를 가져 오겠습니다. 수백 개의 이미지는 Model Maker에게 좋은 시작이지만 더 많은 데이터가 더 나은 정확도를 얻을 수 있습니다.

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

image_path 를 자신의 이미지 폴더로 바꿀 수 있습니다. colab에 데이터를 업로드하는 경우 아래 이미지에 빨간색 사각형으로 표시된 왼쪽 사이드 바에서 업로드 버튼을 찾을 수 있습니다. 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...
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

3 단계. 모델을 평가합니다.

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

4 단계. TensorFlow Lite 모델로 내 보냅니다.

여기서는 모델 설명에 대한 표준을 제공하는 메타 데이터로 TensorFlow Lite 모델을 내 보냅니다. 레이블 파일은 메타 데이터에 포함됩니다. 기본 훈련 후 양자화 기술은 이미지 분류 작업을위한 완전한 인터 거 양자화입니다.

업로드 부분과 동일한 왼쪽 사이드 바에서 직접 다운로드 할 수 있습니다.

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

이 간단한 4 단계 후에는 이미지 분류 참조 앱과 같은 기기 내 애플리케이션에서 TensorFlow Lite 모델 파일을 추가로 사용할 수 있습니다.

세부 프로세스

현재 EfficientNet-Lite * 모델, MobileNetV2, ResNet50과 같은 여러 모델을 이미지 분류를위한 사전 학습 된 모델로 지원합니다. 그러나 몇 줄의 코드만으로 새로운 사전 학습 모델을이 라이브러리에 추가하는 것은 매우 유연합니다.

다음은이 종단 간 예제를 단계별로 안내하여 자세한 내용을 보여줍니다.

1 단계 : 온 디바이스 ML 앱과 관련된 입력 데이터로드

꽃 데이터 세트에는 5 개 클래스에 속하는 3670 개의 이미지가 포함되어 있습니다. 데이터 세트의 아카이브 버전을 다운로드하고 압축을 풉니 다.

데이터 세트에는 다음과 같은 디렉토리 구조가 있습니다.

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

자세한 모델 구조를 살펴보십시오.

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 24ms/step - loss: 0.5999 - accuracy: 0.9292

예측 결과를 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 모델로 내보내기

나중에 온 디바이스 ML 애플리케이션에서 사용할 수 있도록 학습 된 모델을 메타 데이터 가 포함 된 TensorFlow Lite 모델 형식으로 변환합니다. 레이블 파일과 vocab 파일은 메타 데이터에 포함됩니다. 기본 TFLite 파일 이름은 model.tflite 입니다.

많은 온 디바이스 ML 애플리케이션에서 모델 크기는 중요한 요소입니다. 따라서 모델을 더 작게 만들고 잠재적으로 더 빠르게 실행하기 위해 모델 양자화를 적용하는 것이 좋습니다. 기본 훈련 후 양자화 기술은 이미지 분류 작업을위한 완전한 인터 거 양자화입니다.

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 모델을 모바일 앱에 통합하는 방법에 대한 자세한 내용은 예제 애플리케이션 및 이미지 분류 가이드 를 참조하세요.

이 모델은 TensorFlow Lite Task LibraryImageClassifier API 를 사용하여 Android 또는 iOS 앱에 통합 할 수 있습니다.

허용되는 내보내기 형식은 다음 중 하나 또는 목록 일 수 있습니다.

기본적으로 메타 데이터와 함께 TensorFlow Lite 모델 만 내 보냅니다. 다른 파일을 선택적으로 내보낼 수도 있습니다. 예를 들어 다음과 같이 레이블 파일 만 내 보냅니다.

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

evaluate_tflite 메서드를 사용하여 tflite 모델을 평가할 수도 있습니다.

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

고급 사용법

create 기능은이 라이브러리의 중요한 부분입니다. 튜토리얼 과 유사한 사전 훈련 된 모델과 함께 전이 학습을 사용합니다.

create 기능에는 다음 단계가 포함됩니다.

  1. validation_ratiotest_ratio 매개 변수에 따라 데이터를 훈련, 검증, 테스트 데이터로 분할합니다. validation_ratiotest_ratio 의 기본값은 0.10.1 입니다.
  2. TensorFlow Hub에서 이미지 특징 벡터 를 기본 모델로 다운로드합니다. 사전 훈련 된 기본 모델은 EfficientNet-Lite0입니다.
  3. 헤드 레이어와 사전 훈련 된 모델 사이에 dropout_rate 가있는 드롭 아웃 레이어가있는 분류기 헤드를 추가합니다. 기본 dropout_rate 는 TensorFlow Hub의 make_image_classifier_lib 의 기본 dropout_rate 값입니다.
  4. 원시 입력 데이터를 전처리합니다. 현재 각 이미지 픽셀의 값을 모델 입력 스케일로 정규화하고 모델 입력 크기에 맞게 크기를 조정하는 등 전처리 단계가 있습니다. EfficientNet-Lite0에는 입력 배율 [0, 1] 및 입력 이미지 크기 [224, 224, 3] 있습니다.
  5. 분류 자 모델에 데이터를 입력합니다. 기본적으로 훈련 시대, 배치 크기, 학습률, 운동량과 같은 훈련 매개 변수는 TensorFlow Hub의 make_image_classifier_lib 에서 가져온 기본값입니다. 분류 자 헤드 만 훈련됩니다.

이 섹션에서는 다른 이미지 분류 모델로 전환, 훈련 하이퍼 파라미터 변경 등 여러 고급 주제에 대해 설명합니다.

TensorFLow Lite 모델에서 사후 훈련 양자화 사용자 지정

훈련 후 양자화 는 모델 크기와 추론 지연 시간을 줄이는 동시에 모델 정확도를 약간 저하시키면서 CPU 및 하드웨어 가속기 추론 속도를 향상시킬 수있는 변환 기술입니다. 따라서 모델을 최적화하는 데 널리 사용됩니다.

Model Maker 라이브러리는 모델을 내보낼 때 기본 학습 후 양자화 기술을 적용합니다. 학습 후 양자화를 사용자 지정하려는 경우 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/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

Colab에서는 위에서 언급 한 업로드 부분과 동일하게 왼쪽 사이드 바에서 model_fp16.tflite 라는 모델을 다운로드 할 수 있습니다.

모델 변경

이 라이브러리에서 지원되는 모델로 변경하십시오.

이 라이브러리는 현재 EfficientNet-Lite 모델, MobileNetV2, ResNet50을 지원합니다. EfficientNet-Lite 는 최첨단 정확도를 달성하고 Edge 장치에 적합한 이미지 분류 모델 제품군입니다. 기본 모델은 EfficientNet-Lite0입니다.

create 메서드에서 model_spec 매개 변수를 MobileNetV2 모델 사양으로 설정하기 만하면 모델을 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...
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

새로 재 학습 된 MobileNetV2 모델을 평가하여 테스트 데이터의 정확성과 손실을 확인합니다.

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

TensorFlow Hub에서 모델 변경

또한 이미지를 입력하고 TensorFlow Hub 형식으로 특성 벡터를 출력하는 다른 새 모델로 전환 할 수도 있습니다.

Inception V3 모델을 예로 들어 image_classifier.ModelSpec 의 객체이며 Inception V3 모델의 사양을 포함하는 inception_v3_spec 을 정의 할 수 있습니다.

TensorFlow Hub 모델 uri 의 URL 인 모델 이름 name 을 지정해야합니다. 한편, input_image_shape 의 기본값은 [224, 224] 입니다. Inception V3 모델의 경우 [299, 299] 로 변경해야합니다.

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]

그런 다음 create 메서드에서 매개 변수 model_specinception_v3_spec 으로 설정하여 Inception V3 모델을 재교육 할 수 있습니다.

나머지 단계는 정확히 동일하며 결국 사용자 지정 InceptionV3 TensorFlow Lite 모델을 얻을 수 있습니다.

나만의 커스텀 모델 변경

TensorFlow Hub에없는 사용자 지정 모델을 사용하려면 TensorFlow Hub에서 ModelSpec 을 만들고 내 보내야 합니다.

그런 다음 위의 프로세스와 같이 ModelSpec 개체를 정의하기 시작합니다.

훈련 하이퍼 파라미터 변경

모델 정확도에 영향을 미칠 수있는 epochs , dropout_ratebatch_size 와 같은 훈련 하이퍼 파라미터를 변경할 수도 있습니다. 조정할 수있는 모델 매개 변수는 다음과 같습니다.

  • epochs : 수렴 될 때까지 더 많은 epoch가 더 나은 정확도를 얻을 수 있지만 너무 많은 epoch에 대한 훈련은 overfitting으로 이어질 수 있습니다.
  • dropout_rate : dropout_rate , 과적 합 방지. 기본적으로 없음.
  • batch_size : 한 학습 단계에서 사용할 샘플 수. 기본적으로 없음.
  • validation_data : 검증 데이터. 없음 인 경우 유효성 검사 프로세스를 건너 뜁니다. 기본적으로 없음.
  • train_whole_model : true이면 Hub 모듈이 상단의 분류 계층과 함께 train_whole_model 됩니다. 그렇지 않으면 최상위 분류 계층 만 훈련하십시오. 기본적으로 없음.
  • learning_rate : 기본 학습률. 기본적으로 없음.
  • momentum : 최적화 프로그램으로 전달되는 Python float입니다. use_hub_library 가 True 인 경우에만 사용됩니다. 기본적으로 없음.
  • shuffle : 데이터를 섞어 야하는지 여부를 나타내는 부울입니다. 기본적으로 False입니다.
  • use_augmentation : 부울, 전처리를 위해 데이터 증가를 사용합니다. 기본적으로 False입니다.
  • use_hub_library : 부울, tensorflow 허브의 make_image_classifier_lib 를 사용하여 모델을 재 학습합니다. 이 훈련 파이프 라인은 많은 카테고리가있는 복잡한 데이터 세트에 대해 더 나은 성능을 얻을 수 있습니다. 기본적으로 True입니다.
  • warmup_steps : warmup_steps 대한 준비 일정의 준비 단계 수입니다. None이면, 두 epoch의 총 훈련 단계 인 기본 warmup_steps가 사용됩니다. use_hub_library 가 False 인 경우에만 사용됩니다. 기본적으로 없음.
  • model_dir : 선택 사항, 모델 체크 포인트 파일의 위치. use_hub_library 가 False 인 경우에만 사용됩니다. 기본적으로 없음.

epochs 와 같이 기본적으로 None 인 매개 변수는 TensorFlow Hub 라이브러리 또는 train_image_classifier_lib 에서 make_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...
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

10 개의 훈련 시대로 새로 재 훈련 된 모델을 평가합니다.

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

더 읽어보기

이미지 분류 예제를 읽고 기술적 세부 사항을 배울 수 있습니다. 자세한 내용은 다음을 참조하십시오.