TensorFlow Liteを使いたい (M1 Mac)

14:00

とりあえずTensorFlowをインストールしてみる

% conda create -n tf29 python=3.9
zsh: command not found: conda

% /opt/anaconda3/bin/conda init zsh
zsh: no such file or directory: /opt/anaconda3/bin/conda

AnacondaがUsers/username/anaconda3にあったからそこに移動して、
% anaconda3/bin/conda init zsh
% conda --version
conda 23.7.2

できた!

これの続き「TensorFlow用の仮想環境の構築」を再開

全部問題なくできた!

14:30

試しにmain.pyを作って以下書いてみた。

import tensorflow as tf;
print(tf.__version__)

% python3 main.py
2.9.0
できてる!

TensorFlowを使ってみる

% pip install "tensorflow-hub[make_image_classifier]"
なんか違うことやってる?

公式のチュートリアルを見る。

「パッケージのインポート」をmain.pyにコピペして、
% python3 main.py

line 1, in <module>
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'

matplotlibがない。

15:00-16:00 他業務

改めて
% python3 main.py
してみると。。。

Traceback (most recent call last):
…/main.py", line 5, in <module>
import tensorflow as tf
ModuleNotFoundError: No module named 'tensorflow'

前のエラーは謎に無くなってるけど!
tensorflowインストールしてない??

% pip3 install tensorflow
% python3 main.py

エラーでない!ヤッターーー

「データの読み込み」をやっていく。
とりあえずGoogleさんが用意してくれてるテストデータで。

import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential

import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
print('done!')

% python3 main.py
Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
228813984/228813984 [==============================] - 32s 0us/step
done!

dekiteru--!!
何やってるのかよくわからんけど進めていく

import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential

import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)

image_count = len(list(data_dir.glob('*/*.jpg')))
print('image_count',image_count)

# データセットを作成する

batch_size = 32
img_height = 180
img_width = 180

train_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

val_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

class_names = train_ds.class_names
print(class_names)

# データを視覚化する

for image_batch, labels_batch in train_ds:
  print('image_batch',image_batch.shape)
  print('labels_batch', labels_batch.shape)
  break

# パフォーマンスのためにデータセットを構成する

AUTOTUNE = tf.data.AUTOTUNE

train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

# データを標準化する

normalization_layer = layers.Rescaling(1./255)
normalized_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
image_batch, labels_batch = next(iter(normalized_ds))
first_image = image_batch[0]
# Notice the pixel values are now in `[0,1]`.
print(np.min(first_image), np.max(first_image))

# モデルを作成する

num_classes = len(class_names)

data_augmentation = keras.Sequential(
  [
    layers.RandomFlip("horizontal",
                      input_shape=(img_height,
                                  img_width,
                                  3)),
    layers.RandomRotation(0.1),
    layers.RandomZoom(0.1),
  ]
)
plt.figure(figsize=(10, 10))
for images, _ in train_ds.take(1):
  for i in range(9):
    augmented_images = data_augmentation(images)
    ax = plt.subplot(3, 3, i + 1)
    plt.imshow(augmented_images[0].numpy().astype("uint8"))
    plt.axis("off")

model = Sequential([
  data_augmentation,
  layers.Rescaling(1./255),
  layers.Conv2D(16, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(32, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(64, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Dropout(0.2),
  layers.Flatten(),
  layers.Dense(128, activation='relu'),
  layers.Dense(num_classes)
])

# モデルをコンパイルする

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
model.summary()

# モデルをトレーニングする

epochs = 15
history = model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs
)

ちゃんと動いてる!!

モデルを TensorFlow Lite に変換

# モデルを変換

converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

追記して、% python3 main.py

2023-09-06 17:05:27.555419: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:364] Ignored output_format.
2023-09-06 17:05:27.555709: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:367] Ignored drop_control_dependency.
2023-09-06 17:05:27.559732: I tensorflow/cc/saved_model/reader.cc:45] Reading SavedModel from: /var/folders/cv/yb103sl92sn87wng_mvscb_80000gn/T/tmpmzulpu9i
2023-09-06 17:05:27.561381: I tensorflow/cc/saved_model/reader.cc:91] Reading meta graph with tags { serve }
2023-09-06 17:05:27.561388: I tensorflow/cc/saved_model/reader.cc:132] Reading SavedModel debug info (if present) from: /var/folders/cv/yb103sl92sn87wng_mvscb_80000gn/T/tmpmzulpu9i
2023-09-06 17:05:27.567752: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:375] MLIR V1 optimization pass is not enabled
2023-09-06 17:05:27.570055: I tensorflow/cc/saved_model/loader.cc:231] Restoring SavedModel bundle.
2023-09-06 17:05:27.720927: I tensorflow/cc/saved_model/loader.cc:215] Running initialization op on SavedModel bundle at path: /var/folders/cv/yb103sl92sn87wng_mvscb_80000gn/T/tmpmzulpu9i
2023-09-06 17:05:27.736824: I tensorflow/cc/saved_model/loader.cc:314] SavedModel load for tags { serve }; Status: success: OK. Took 177085 microseconds.
2023-09-06 17:05:27.772240: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:255] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.

エラーは出てない?
できてる?
modename.tfliteみたいなファイルが作成されるイメージだったけど違うんかな。。

結局これやらないといけないみたい。
$ pip install tflite-model-maker
AttributeError: cython_sources
やっぱりエラー

その前に.h5ファイルが必要??

https://www.tensorflow.org/guide/keras/save_and_serialize?hl=ja

tflite_model.save('model.h5')
これか!??

AttributeError: 'bytes' object has no attribute 'save'

convertされたやつは違う??

model.save('model.h5')
こっちにしてみる。

UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.
saving_api.save_model(

できたけどこのやり方は古いらしい

あとはこれに従って

OUTPUT-MODEL.tfliteができた!

FirebaseのMachine Learningにアップロードしていく。

17:40

できたーーー!!!!

わーーーーーい!!!!

次は自分で作成したデータでモデルを作るぞ。

この記事が気に入ったらサポートをしてみませんか?