Trang này được dịch bởi Cloud Translation API.
Switch to English

Di chuyển từ TF1 sang TF2 với TensorFlow Hub

Trang này giải thích cách tiếp tục sử dụng TensorFlow Hub trong khi di chuyển mã TensorFlow của bạn từ TensorFlow 1 sang TensorFlow 2. Nó bổ sung cho hướng dẫn di chuyển chung của TensorFlow.

Đối với TF2, TF Hub đã chuyển khỏi trung tâm kế thừa hub.Module để xây dựng tf.compat.v1.Graph như tf.contrib.v1.layers . Thay vào đó, giờ đây đã có một hub.KerasLayer để sử dụng cùng với các lớp Keras khác để xây dựng một tf.keras.Model (thường là trong môi trường thực thi háo hức mới của TF2) và phương thức hub.load() cơ bản của nó cho mã TensorFlow cấp thấp.

API hub.Module vẫn có sẵn trong thư viện tensorflow_hub để sử dụng trong TF1 và trong chế độ tương thích TF1 của TF2. Nó chỉ có thể tải các mô hình ở định dạng TF1 Hub .

API mới của hub.load()hub.KerasLayer hoạt động cho TensorFlow 1.15 (ở chế độ háo hức và đồ thị) và trong TensorFlow 2. API mới này có thể tải các tài sản TF2 SavingModel mới và, với các hạn chế được đưa ra trong mô hình hướng dẫn tương thích , các mô hình cũ ở định dạng TF1 Hub.

Nói chung, nên sử dụng API mới bất cứ khi nào có thể.

Tóm tắt API mới

hub.load() là hàm cấp thấp mới để tải SavingModel từ TensorFlow Hub (hoặc các dịch vụ tương thích). Nó kết thúc tf.saved_model.load() của TF2; Hướng dẫn SavingModel của TensorFlow mô tả những gì bạn có thể làm với kết quả.

 m = hub.load(handle)
outputs = m(inputs)
 

Lớp hub.KerasLayer gọi hub.load() và điều chỉnh kết quả để sử dụng trong Keras cùng với các lớp Keras khác. (Nó thậm chí có thể là một trình bao bọc thuận tiện cho các SavingModels được tải được sử dụng theo những cách khác.)

 model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])
 

Nhiều hướng dẫn cho thấy các API này đang hoạt động. Xem cụ thể

Sử dụng API mới trong đào tạo Công cụ ước tính

Nếu bạn sử dụng TF2 SavingModel trong Công cụ ước tính để đào tạo với các máy chủ tham số (hoặc nếu không trong Phiên TF1 với các biến được đặt trên thiết bị từ xa), bạn cần đặt experimental.share_cluster_devices_in_session nghiệm.share_cluster_devices_in_session trong ConfigProto của tf.Session, nếu không bạn sẽ gặp lỗi như "Thiết bị được gán '/ công việc: ps / bản sao: 0 / tác vụ: 0 / thiết bị: CPU: 0' không khớp với bất kỳ thiết bị nào."

Tùy chọn cần thiết có thể được đặt như

 session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)
 

Bắt đầu với TF2.2, tùy chọn này không còn thử nghiệm nữa và phần .experimental có thể bị loại bỏ.

Đang tải các mô hình cũ ở định dạng TF1 Hub

Có thể xảy ra rằng TF2 SavingModel mới chưa có sẵn cho trường hợp sử dụng của bạn và bạn cần tải một mô hình cũ ở định dạng TF1 Hub. Bắt đầu trong bản phát hành tensorflow_hub 0.7, bạn có thể sử dụng mô hình kế thừa ở định dạng TF1 Hub cùng với hub.KerasLayer như được hiển thị bên dưới:

 m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
 

Ngoài ra, KerasLayer cho thấy khả năng chỉ định tags , signature , output_keysignature_outputs_as_dict output_key cho các cách sử dụng cụ thể hơn của các mô hình kế thừa ở định dạng TF1 Hub và SavingModels kế thừa.

Để biết thêm thông tin về khả năng tương thích định dạng Hub TF1, hãy xem hướng dẫn tương thích mô hình .

Sử dụng API cấp thấp hơn

Các mô hình định dạng tf.saved_model.load TF1 có thể được tải thông qua tf.saved_model.load . Thay vì

 # DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
 

nên sử dụng:

 # TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
 

Trong các ví dụ này, m.signatures là một hàm của các hàm cụ thể TensorFlow được khóa bằng tên chữ ký. Gọi một hàm như vậy sẽ tính toán tất cả các đầu ra của nó, ngay cả khi không được sử dụng. (Điều này khác với đánh giá lười biếng về chế độ đồ thị của TF1.)