Xuất một SavedModel

Trang này mô tả chi tiết về việc xuất (lưu) mô hình từ chương trình TensorFlow sang định dạng SavedModel của TensorFlow 2 . Định dạng này là cách được khuyến nghị để chia sẻ các mô hình và phần mô hình được đào tạo trước trên TensorFlow Hub. Nó thay thế định dạng TF1 Hub cũ hơn và đi kèm với một bộ API mới. Bạn có thể tìm thêm thông tin về cách xuất mô hình định dạng Trung tâm TF1 trong xuất định dạng Trung tâm TF1 . Bạn có thể tìm thấy chi tiết về cách nén SavedModel để chia sẻ nó trên TensorFlow Hub tại đây .

Một số bộ công cụ xây dựng mô hình đã cung cấp các công cụ để thực hiện việc này (ví dụ: xem bên dưới về Vườn mô hình TensorFlow ).

Tổng quat

SavedModel là định dạng tuần tự hóa tiêu chuẩn của TensorFlow dành cho các mô hình hoặc phần mô hình được đào tạo. Nó lưu trữ các trọng số được đào tạo của mô hình cùng với các hoạt động TensorFlow chính xác để thực hiện tính toán của nó. Nó có thể được sử dụng độc lập với mã đã tạo ra nó. Đặc biệt, nó có thể được sử dụng lại trên các API xây dựng mô hình cấp cao khác nhau như Keras, vì các hoạt động TensorFlow là ngôn ngữ cơ bản chung của chúng.

Tiết kiệm từ Keras

Bắt đầu với TensorFlow 2, tf.keras.Model.save()tf.keras.models.save_model() mặc định ở định dạng SavedModel (không phải HDF5). Các SavedModels kết quả có thể được sử dụng với hub.load() , hub.KerasLayer và các bộ điều hợp tương tự cho các API cấp cao khác khi chúng có sẵn.

Để chia sẻ một Mô hình Keras hoàn chỉnh, chỉ cần lưu nó với include_optimizer=False .

Để chia sẻ một phần của Mô hình Keras, hãy đặt phần đó thành Mô hình và sau đó lưu phần đó. Bạn có thể đặt mã như vậy ngay từ đầu ....

piece_to_share = tf.keras.Model(...)
full_model = tf.keras.Sequential([piece_to_share, ...])
full_model.fit(...)
piece_to_share.save(...)

... hoặc cắt ra phần để chia sẻ sau khi thực tế (nếu nó phù hợp với phân lớp của mô hình đầy đủ của bạn):

full_model = tf.keras.Model(...)
sharing_input = full_model.get_layer(...).get_output_at(0)
sharing_output = full_model.get_layer(...).get_output_at(0)
piece_to_share = tf.keras.Model(sharing_input, sharing_output)
piece_to_share.save(..., include_optimizer=False)

Mô hình TensorFlow trên GitHub sử dụng cách tiếp cận trước đây cho BERT (xem nlp / tools / export_tfhub_lib.py , lưu ý sự phân tách giữa core_model để xuất và trình pretrainer để khôi phục điểm kiểm tra) và phương pháp sau cho ResNet (xem kế thừa / image_classification / tfhub_export. py ).

Tiết kiệm từ TensorFlow cấp thấp

Điều này đòi hỏi bạn phải quen thuộc với Hướng dẫn mô hình đã lưu của TensorFlow.

Nếu bạn muốn cung cấp nhiều hơn chỉ là chữ ký phục vụ, bạn nên triển khai giao diện SavedModel có thể tái sử dụng . Về mặt khái niệm, điều này trông giống như

class MyMulModel(tf.train.Checkpoint):
  def __init__(self, v_init):
    super().__init__()
    self.v = tf.Variable(v_init)
    self.variables = [self.v]
    self.trainable_variables = [self.v]
    self.regularization_losses = [
        tf.function(input_signature=[])(lambda: 0.001 * self.v**2),
    ]

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def __call__(self, inputs):
    return tf.multiply(inputs, self.v)

tf.saved_model.save(MyMulModel(2.0), "/tmp/my_mul")

layer = hub.KerasLayer("/tmp/my_mul")
print(layer([10., 20.]))  # [20., 40.]
layer.trainable = True
print(layer.trainable_weights)  # [2.]
print(layer.losses)  # 0.004

Lời khuyên dành cho người tạo SavedModel

Khi tạo SavedModel để chia sẻ trên TensorFlow Hub, hãy nghĩ trước xem người tiêu dùng có nên tinh chỉnh nó hay không và cung cấp hướng dẫn trong tài liệu.

Tiết kiệm từ Mô hình Keras sẽ làm cho tất cả các cơ chế tinh chỉnh hoạt động (tiết kiệm tổn thất điều chỉnh trọng số, khai báo các biến có thể truy tìm, truy tìm __call__ cho cả training=Truetraining=False , v.v.)

Chọn giao diện mô hình hoạt động tốt với dòng chảy gradient, ví dụ: nhật ký đầu ra thay vì xác suất softmax hoặc dự đoán top-k.

Nếu mô hình sử dụng kỹ thuật bỏ qua, chuẩn hóa hàng loạt hoặc các kỹ thuật đào tạo tương tự liên quan đến siêu tham số, hãy đặt chúng thành các giá trị có ý nghĩa đối với nhiều vấn đề mục tiêu dự kiến ​​và kích thước hàng loạt. (Theo cách viết này, việc tiết kiệm từ Keras không giúp người tiêu dùng dễ dàng điều chỉnh chúng.)

Bộ điều chỉnh trọng lượng trên các lớp riêng lẻ được lưu (với hệ số cường độ chính quy của chúng), nhưng điều chỉnh trọng lượng từ bên trong trình tối ưu hóa (như tf.keras.optimizers.Ftrl.l1_regularization_strength=...) ) bị mất. Tư vấn cho người tiêu dùng SavedModel của bạn cho phù hợp.

Vườn mô hình TensorFlow

Kho lưu trữ TensorFlow Model Garden chứa rất nhiều ví dụ về cách tạo các Mô hình đã lưu TF2 có thể sử dụng lại để tải lên trên hub.tensorflow.google.cn .

Yêu cầu của cộng đồng

Nhóm TensorFlow Hub chỉ tạo một phần nhỏ nội dung có sẵn trên hub.tensorflow.google.cn. Chúng tôi chủ yếu dựa vào các nhà nghiên cứu tại Google và Deepmind, các tổ chức nghiên cứu công ty và học thuật cũng như những người đam mê ML để tạo ra các mô hình. Do đó, chúng tôi không thể đảm bảo rằng chúng tôi có thể đáp ứng các yêu cầu của cộng đồng đối với các nội dung cụ thể và chúng tôi không thể cung cấp ước tính thời gian về tính khả dụng của nội dung mới.

Mốc yêu cầu mô hình cộng đồng bên dưới chứa các yêu cầu từ cộng đồng đối với các nội dung cụ thể - nếu bạn hoặc ai đó mà bạn biết quan tâm đến việc sản xuất nội dung đó và chia sẻ nội dung đó trênhub.tensorflow.google.cn, chúng tôi hoan nghênh bạn gửi!