LoginSignup
1
2

(TF2.16)TensorFlowのバージョンを上げたらKeras3も落ちてきて、古い saved model が読み込めなくて、Keras2互換にして対処した件

Last updated at Posted at 2024-04-30

何が起きた

わい「GWやし趣味開発しよ。さいつよモデル作るんや。」

わい「もうTensorFlowも2.16か~。せや、お古のモデル、読み込んでみよ。」

TensorFlow・Keras「お前のモデル古すぎワロタ。時代は.keras 形式やで。出直せや。」

結論からいうと、

  • TensorFlow2.16からKeras3が使われるようになった
  • Keras3でsaved_modelをtf.keras.model.load_modelで読み込めなくなった
  • 解決には、別のAPIを使うかKeras2を使う必要がある(後でKeras2を使う方法を詳述

モデルの読み込み以外でも参考になると思い、筆を執りました。

詳しい設定・エラーメッセージはこちら。

設定

項目
モデル作成時TensorFlowバージョン 2.8.2
モデル作成時Kerasバージョン 2.8.0
モデル形式 keras.Model.saveでsave_format="tf"として保存したsaved model形式
読み込み時TensorFlowバージョン 2.16.1
読み込み時Kerasバージョン 3.0.5
読み込み方法 tf.keras.models.load_model

エラーメッセージ

Traceback (most recent call last):
  File {ファイルパス}, line {行数}, in <module>
    m = tf.keras.models.load_model({モデルのパス})
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/keras/src/saving/saving_api.py", line 191, in load_model
    raise ValueError(
ValueError: File format not supported: filepath={モデルのパス}. Keras 3 only supports V3 `.keras` files and legacy H5 format files (`.h5` extension). Note that the legacy SavedModel format is not supported by `load_model()` in Keras 3. In order to reload a TensorFlow SavedModel as an inference-only layer in Keras 3, use `keras.layers.TFSMLayer({モデルのパス}, call_endpoint='serving_default')` (note that your `call_endpoint` might have a different name).

解決策

解決には、別のAPIを使うかKeras2を使うアプローチがあります。
別のAPIを使う方法は、エラーメッセージに従ってTFSMLayerを使う方法や、tf.saved_model.loadを使う方法です。ただ、今回試したモデルでは上手くいかなかったので、これは諦めました。

ということで、Keras2を使う方法です。

Keras2を使う方法

以下のリリースノートの「To continue using Keras 2.0, do the following.」のくだりを参考にしました。

リリースノートに、以下のようにtf-kerasを介してKeras2を使う方法が説明されています。

  • (共通) tf-kerasをインストール(pip install tf-keras~=2.16等)
  • (方法1)環境変数の設定(TF_USE_LEGACY_KERAS=1)を行って実行する
  • (方法2)tf.keras の代わりに import tf_keras してtf_kerasを用いる

方法1も方法2もtf-kerasのインストールが必要です。方法1は、環境変数でtf.kerasの実体をtf_kerasに変更している感じです。

以上。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2