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

Định dạng TF1 Hub

Khi ra mắt vào năm 2018, TensorFlow Hub đã cung cấp một loại tài sản duy nhất: định dạng TF1 Hub để nhập vào các chương trình TensorFlow 1.

Trang này giải thích cách sử dụng định dạng TF1 Hub trong TF1 (hoặc chế độ tương thích TF1 của TF2) với lớp hub.Module và các API liên quan. (Việc sử dụng thông thường là để xây dựng một tf.Graph , có thể bên trong Estimator TF1, bằng cách kết hợp một hoặc nhiều mô hình ở định dạng TF1 Hub với tf.compat.layers hoặc tf.layers ).

Người dùng của TensorFlow 2 (bên ngoài chế độ tương thích TF1) phải sử dụng API mới với hub.load() hoặc hub.KerasLayer . API mới tải loại tài sản TF2 SavingModel mới, nhưng cũng có hỗ trợ hạn chế để tải định dạng TF1 Hub vào TF2 .

Sử dụng mô hình ở định dạng TF1 Hub

Khởi tạo một mô hình ở định dạng TF1 Hub

Một mô hình ở định dạng TF1 Hub được nhập vào chương trình TensorFlow bằng cách tạo một đối tượng hub.Module từ một chuỗi với đường dẫn URL hoặc hệ thống tệp của nó, chẳng hạn như:

 m = hub.Module("path/to/a/module_dir")
 

Điều này thêm các biến của mô-đun vào biểu đồ TensorFlow hiện tại. Chạy trình khởi tạo của họ sẽ đọc các giá trị được đào tạo trước từ đĩa. Tương tự, các bảng và trạng thái khác được thêm vào biểu đồ.

Mô-đun bộ đệm

Khi tạo một mô-đun từ một URL, nội dung mô-đun được tải xuống và lưu vào bộ đệm trong thư mục tạm thời của hệ thống cục bộ. Vị trí nơi các mô-đun được lưu trữ có thể được ghi đè bằng biến môi trường TFHUB_CACHE_DIR . Để biết chi tiết, xem Bộ đệm .

Áp dụng một mô-đun

Sau khi được khởi tạo, một mô-đun m có thể được gọi là 0 hoặc nhiều lần như hàm Python từ đầu vào tenor đến đầu ra tenxơ:

 y = m(x)
 

Mỗi cuộc gọi như vậy sẽ thêm các hoạt động vào biểu đồ TensorFlow hiện tại để tính y từ x . Nếu điều này liên quan đến các biến có trọng số được đào tạo, chúng được chia sẻ giữa tất cả các ứng dụng.

Các mô-đun có thể định nghĩa nhiều chữ ký được đặt tên để cho phép được áp dụng theo nhiều cách (tương tự như cách các đối tượng Python có phương thức ). Tài liệu của một mô-đun nên mô tả các chữ ký có sẵn. Cuộc gọi ở trên áp dụng chữ ký có tên "default" . Bất kỳ chữ ký nào cũng có thể được chọn bằng cách chuyển tên của nó cho signature= đối số tùy chọn.

Nếu một chữ ký có nhiều đầu vào, chúng phải được truyền dưới dạng chính tả, với các khóa được xác định bởi chữ ký. Tương tự, nếu một chữ ký có nhiều đầu ra, chúng có thể được truy xuất dưới dạng một lệnh bằng cách chuyển as_dict=True , dưới các khóa được xác định bởi chữ ký (khóa "default" dành cho đầu ra duy nhất được trả về nếu as_dict=False ). Vì vậy, hình thức chung nhất của việc áp dụng Mô-đun trông giống như:

 outputs = m(dict(apples=x1, oranges=x2), signature="fruit_to_pet", as_dict=True)
y1 = outputs["cats"]
y2 = outputs["dogs"]
 

Người gọi phải cung cấp tất cả các đầu vào được xác định bằng chữ ký, nhưng không có yêu cầu sử dụng tất cả các đầu ra của mô-đun. TensorFlow sẽ chỉ chạy các phần của mô-đun kết thúc dưới dạng phụ thuộc của mục tiêu trong tf.Session.run() . Thật vậy, các nhà xuất bản mô-đun có thể chọn cung cấp các đầu ra khác nhau cho các mục đích sử dụng nâng cao (như kích hoạt các lớp trung gian) cùng với các đầu ra chính. Người tiêu dùng mô-đun nên xử lý đầu ra bổ sung một cách duyên dáng.

Dùng thử các mô-đun thay thế

Bất cứ khi nào có nhiều mô-đun cho cùng một nhiệm vụ, TensorFlow Hub khuyến khích trang bị cho chúng các ký hiệu (giao diện) tương thích sao cho việc thử các mô-đun khác nhau cũng dễ như thay đổi xử lý mô-đun như một siêu tham số có giá trị chuỗi.

Để kết thúc này, chúng tôi duy trì một bộ sưu tập Chữ ký chung được khuyến nghị cho các tác vụ phổ biến.

Tạo mô-đun mới

Ghi chú tương thích

Định dạng TF1 Hub hướng đến TensorFlow 1. Nó chỉ được hỗ trợ một phần bởi TF Hub trong TensorFlow 2. Thay vào đó, vui lòng xem xét xuất bản ở định dạng TF2 SavingModel mới.

Định dạng TF1 Hub tương tự như định dạng SavingModel của TensorFlow 1 ở cấp độ cú pháp (cùng tên tệp và thông điệp giao thức) nhưng khác nhau về mặt ngữ nghĩa để cho phép tái sử dụng mô-đun, thành phần và đào tạo lại (ví dụ: lưu trữ khác nhau của bộ khởi tạo tài nguyên, gắn thẻ khác nhau quy ước cho các đoạn). Cách dễ nhất để phân biệt chúng trên đĩa là sự hiện diện hay vắng mặt của tệp tfhub_module.pb .

Cách tiếp cận chung

Để xác định một mô-đun mới, một nhà xuất bản gọi hub.create_module_spec() với một hàm module_fn . Hàm này xây dựng một biểu đồ biểu thị cấu trúc bên trong của mô-đun, sử dụng tf.placeholder() cho các đầu vào được cung cấp bởi người gọi. Sau đó, nó xác định chữ ký bằng cách gọi hub.add_signature(name, inputs, outputs) một hoặc nhiều lần.

Ví dụ:

 def module_fn():
  inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
  layer1 = tf.layers.dense(inputs, 200)
  layer2 = tf.layers.dense(layer1, 100)
  outputs = dict(default=layer2, hidden_activations=layer1)
  # Add default signature.
  hub.add_signature(inputs=inputs, outputs=outputs)

...
spec = hub.create_module_spec(module_fn)
 

Kết quả của hub.create_module_spec() có thể được sử dụng, thay vì một đường dẫn, để khởi tạo một đối tượng mô-đun trong một biểu đồ TensorFlow cụ thể. Trong trường hợp như vậy, không có điểm kiểm tra và cá thể mô-đun sẽ sử dụng các bộ khởi tạo biến thay thế.

Bất kỳ phiên bản mô-đun nào cũng có thể được tuần tự hóa vào đĩa thông qua phương thức export(path, session) . Xuất khẩu một mô-đun nối tiếp định nghĩa của nó cùng với trạng thái hiện tại của các biến trong session vào đường dẫn đã qua. Điều này có thể được sử dụng khi xuất một mô-đun lần đầu tiên, cũng như khi xuất một mô-đun tinh chỉnh.

Để tương thích với Công cụ ước tính TensorFlow, hub.LatestModuleExporter xuất các mô-đun từ điểm kiểm tra mới nhất, giống như tf.estimator.LatestExporter xuất toàn bộ mô hình từ điểm kiểm tra mới nhất.

Các nhà xuất bản mô-đun nên thực hiện một chữ ký chung khi có thể, để người tiêu dùng có thể dễ dàng trao đổi các mô-đun và tìm ra mô-đun tốt nhất cho vấn đề của họ.

Ví dụ thực tế

Hãy xem nhà xuất khẩu mô-đun nhúng văn bản của chúng tôi để biết ví dụ thực tế về cách tạo mô-đun từ định dạng nhúng văn bản phổ biến.

Tinh chỉnh

Đào tạo các biến của một mô-đun nhập khẩu cùng với các biến của mô hình xung quanh nó được gọi là tinh chỉnh . Tinh chỉnh có thể dẫn đến chất lượng tốt hơn, nhưng thêm các biến chứng mới. Chúng tôi khuyên người tiêu dùng chỉ nên xem xét tinh chỉnh sau khi khám phá các tinh chỉnh chất lượng đơn giản hơn và chỉ khi nhà xuất bản mô-đun đề xuất.

Dành cho người tiêu dùng

Để cho phép tinh chỉnh, khởi tạo mô-đun bằng hub.Module(..., trainable=True) để làm cho các biến của nó có thể được huấn luyện và nhập REGULARIZATION_LOSSES của TensorFlow. Nếu mô-đun có nhiều biến thể đồ thị, hãy đảm bảo chọn một biến thể phù hợp cho đào tạo. Thông thường, đó là cái có thẻ {"train"} .

Chọn một chế độ đào tạo không làm hỏng trọng lượng được đào tạo trước, ví dụ, tỷ lệ học tập thấp hơn so với đào tạo từ đầu.

Dành cho nhà xuất bản

Để làm cho tinh chỉnh dễ dàng hơn cho người tiêu dùng, xin lưu ý những điều sau:

  • Tinh chỉnh cần thường xuyên. Mô-đun của bạn được xuất với bộ sưu tập REGULARIZATION_LOSSES , đây là yếu tố đưa sự lựa chọn của bạn về tf.layers.dense(..., kernel_regularizer=...) v.v. vào những gì người tiêu dùng nhận được từ tf.losses.get_regularization_losses() . Thích cách xác định tổn thất chính quy hóa L1 / L2 này.

  • Trong mô hình nhà xuất bản, tránh việc xác định L1 / L2 quy tắc thông qua l1_l2_regularization_strength thông số của tf.train.FtrlOptimizer , tf.train.ProximalGradientDescentOptimizer , và tối ưu gần khác. Chúng không được xuất khẩu cùng với mô-đun và thiết lập cường độ chính quy hóa trên toàn cầu có thể không phù hợp với người tiêu dùng. Ngoại trừ việc thường xuyên hóa L1 trong các mô hình rộng (tức là tuyến tính thưa thớt) hoặc rộng & sâu, có thể sử dụng các tổn thất chính quy hóa riêng lẻ thay thế.

  • Nếu bạn sử dụng bỏ học, chuẩn hóa hàng loạt hoặc các kỹ thuật đào tạo tương tự, hãy đặt siêu âm của chúng thành các giá trị có ý nghĩa trong nhiều lần sử dụng dự kiến. Tỷ lệ bỏ học có thể phải được điều chỉnh theo xu hướng của vấn đề mục tiêu là quá mức. Trong chuẩn hóa hàng loạt, động lượng (còn gọi là hệ số phân rã) phải đủ nhỏ để cho phép tinh chỉnh với các bộ dữ liệu nhỏ và / hoặc các lô lớn. Đối với người tiêu dùng tiên tiến, hãy xem xét thêm một chữ ký thể hiện sự kiểm soát đối với các siêu đường kính phê bình.