文章範例是使用 Tensorflow 2.3 version
實在忍不住小小抱怨一下 Tensorflow 的文件實在太糟了,連官方 Repo 裡的範例都過時, TF v1 跟 TF v2 的資訊,也都混合再一起,有種霧裏看花的感覺。
在 tf.saved_model 命名空間下,主要有三個類別 (Asset, LoadOptions, SaveOptions) 和三個函式 (contains_saved_model, load, save) 所組成。
用來將資產 (asset) 封裝到 SavedModel 中。
資產 (asset) 可以代表是文字檔、圖片或任何檔案,當建立 SavedModel 物件時,會一並把這裡設定的資產一併包進 SavedModel 中,這樣之後資產才有辦法可以正確被讀取。
語法
tf.saved_model.Asset(
path
)
範例
filename = tf.saved_model.Asset("file.txt")
@tf.function(input_signature=[])
def func():
return tf.io.read_file(filename)
trackable_obj = tf.train.Checkpoint()
trackable_obj.func = func
trackable_obj.filename = filename
tf.saved_model.save(trackable_obj, "/tmp/saved_model")
# 建立和封裝 SavedModel 物件,它不一定要跟著原始的檔案路徑,也可以指定其他路徑。
tf.io.gfile.remove("file.txt")
tf.io.gfile.rename("/tmp/saved_model", "/tmp/new_location")
reloaded_obj = tf.saved_model.load("/tmp/new_location")
print(reloaded_obj.func())
用來設定載入 SavedModel 的時候,SavedModel 要帶的參數 (options)。
語法
tf.saved_model.LoadOptions(
experimental_io_device=None
)
參數
用來設定匯出 SavedModel 的時候,SavedModel 要帶的參數 (options)。
語法
tf.saved_model.SaveOptions(
namespace_whitelist=None, save_debug_info=False, function_aliases=None,
experimental_io_device=None
)
範例
class MyModel:
@tf.function
def func():
...
@tf.function
def serve():
...
func()
model = MyModel()
signatures = {
'serving_default': model.serve.get_concrete_function(),
}
options = tf.saved_model.SaveOptions(function_aliases={
'my_func': func,
})
tf.saved_model.save(model, export_dir, signatures, options)
參數