iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
DevOps

30 Days of MLOps系列 第 16

tf.saved_model 命名空間下的函式

  • 分享至 

  • xImage
  •  

文章範例是使用 TensorFlow 2.3 version

contains_saved_model 函式

檢查指定的目錄位置,存放的是否為真的 SavedModel 物件。

語法

tf.saved_model.contains_saved_model(
    export_dir
)

load 函式

從指定的資料夾,載入 SavedModel 物件。

語法

tf.saved_model.load(
    export_dir, tags=None, options=None
)

範例

load 和 signatures

imported = tf.saved_model.load(path)
f = imported.signatures["serving_default"]
print(f(x=tf.constant([[1.]])))

與 trackable 物件

exported = tf.train.Checkpoint(v=tf.Variable(3.))
exported.f = tf.function(
    lambda x: exported.v * x,
    input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
tf.saved_model.save(exported, path)
imported = tf.saved_model.load(path)
assert 3. == imported.v.numpy()
assert 6. == imported.f(x=tf.constant(2.)).numpy()

與 Keras model

Keras Model 是可 trackable 的物件,因此可以將它存為 SavedModel 物件,但這裡產生的物件並不是真的 Keras 物件,所以不具有 (即不具有 Keras 物件裡的 fit, predict 等函式,但有一些屬性和函式仍然可用:例如 variables, trainable_variables 和 __call__

model = tf.keras.Model(...)
tf.saved_model.save(model, path)
imported = tf.saved_model.load(path)
outputs = imported(inputs)

如果想要將物件,重新轉為 Keras 物件,可以使用 tf.keras.models.load_model 函式。

Save 函式

語法

將 obj 物件匯出成可被 Trackable 的 SavedModel 物件。

TensorFlow SavedModel 格式文件: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md

tf.saved_model.save(
    obj, export_dir, signatures=None, options=None
)

只要是用有 Trackable 特質的物件,就代表可以被 Tensorflow Serving 使用。

範例

class Adder(tf.Module):

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def add(self, x):
    return x + x + 1.

to_export = Adder()
tf.saved_model.save(to_export, '/tmp/adder')

Keras 與 Save Model

tf.keras.Model 物件也可以被 Trackable。

class Model(tf.keras.Model):

  @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string)])
  def serve(self, serialized):
    ...

m = Model()
tf.saved_model.save(m, '/tmp/saved_model/')
class Model(tf.keras.Model):

  @tf.function
  def call(self, x):
    ...

m = Model()
tf.saved_model.save(
    m, '/tmp/saved_model/',
    signatures=m.call.get_concrete_function(
        tf.TensorSpec(shape=[None, 3], dtype=tf.float32, name="inp")))

參考資料


上一篇
tf.saved_model 命名空間下的類別
下一篇
Custom Model 與 TensorFlow Serving 整合
系列文
30 Days of MLOps23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言