嘗試按照TensorFlow 教程保存 Keras 模型。
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras.models import Model
import tensorflow_hub as hub
import tensorflow as tf
module_url = "https://tfhub.dev/google/universal-sentence-encoder/4"
input1 = Input(shape=[], dtype=tf.string)
loaded_obj = hub.load(module_url)
emb = hub.KerasLayer(loaded_obj, trainable=False)
embedding_layer = emb(input1)
dense1 = Dense(units=512, activation="relu")(embedding_layer)
outputs = Dense(1, activation="sigmoid")(dense1)
model = Model(inputs=input1, outputs=outputs)
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["AUC"])
tf.saved_model.save(loaded_obj, "fine_tuned")
model.save("model.h5", include_optimizer=False)
最后一行給出
NotImplementedError Traceback (most recent call last) /var/folders/x9/2_wr3dnn4pv0v_t3k096rrt00000gn/T/ipykernel_49946/3843995216.py in <module>
17
18 tf.saved_model.save(loaded_obj, "fine_tuned")
---> 19 model.save("model.h5", include_optimizer=False)
~/anaconda3/envs/tensorflow/lib/python3.7/site-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
65 except Exception as e: # pylint: disable=broad-except
66 filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67 raise e.with_traceback(filtered_tb) from None
68 finally:
69 del filtered_tb
~/anaconda3/envs/tensorflow/lib/python3.7/site-packages/tensorflow_hub/keras_layer.py in get_config(self)
330 "Can only generate a valid config for `hub.KerasLayer(handle, ...)`"
331 "that uses a string `handle`.\n\n"
--> 332 "Got `type(handle)`: {}".format(type(self._handle)))
333 config["handle"] = self._handle
334
NotImplementedError: Can only generate a valid config for `hub.KerasLayer(handle, ...)`that uses a string `handle`.
Got `type(handle)`: <class 'tensorflow.python.saved_model.load.Loader._recreate_base_user_object.<locals>._UserObject'>
我怎么能解決這個問題?model.to_json()也回傳相同的NotImplementedError.
print("tensorflow:", tf.__version__)
print("tensorflow_hub:", hub.__version__)
print("keras:", tf.keras.__version__)
tensorflow: 2.7.0
tensorflow_hub: 0.12.0
keras: 2.7.0
uj5u.com熱心網友回復:
根據這篇文章:
如果使用 Python 可呼叫而不是字串進行初始化,hub.KerasLayer 無法保存 Keras 模型配置(根據保存到 HDF5 的要求)[...]
因此,要么在 中使用文字字串hub.KerasLayer:
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras.models import Model
import tensorflow_hub as hub
import tensorflow as tf
module_url = "https://tfhub.dev/google/universal-sentence-encoder/4"
input1 = Input(shape=[], dtype=tf.string)
loaded_obj = hub.load(module_url)
emb = hub.KerasLayer("https://tfhub.dev/google/universal-sentence-encoder/4", trainable=False)
embedding_layer = emb(input1)
dense1 = Dense(units=512, activation="relu")(embedding_layer)
outputs = Dense(1, activation="sigmoid")(dense1)
model = Model(inputs=input1, outputs=outputs)
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["AUC"])
tf.saved_model.save(loaded_obj, "fine_tuned")
model.save("model.h5", include_optimizer=False)
或使用默認SavedModel 格式保存您的模型:
module_url = "https://tfhub.dev/google/universal-sentence-encoder/4"
input1 = Input(shape=[], dtype=tf.string)
loaded_obj = hub.load(module_url)
emb = hub.KerasLayer(loaded_obj, trainable=False)
embedding_layer = emb(input1)
dense1 = Dense(units=512, activation="relu")(embedding_layer)
outputs = Dense(1, activation="sigmoid")(dense1)
model = Model(inputs=input1, outputs=outputs)
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["AUC"])
tf.saved_model.save(loaded_obj, "fine_tuned")
model.save("model", include_optimizer=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362373.html
