Các sự cố thường gặp:

Nếu vấn đề của bạn không được liệt kê ở đây, vui lòng tìm kiếm các vấn đề trên github trước khi điền vấn đề mới.

TypeError: Đối tượng 'AutoTrackable' không thể gọi được

# BAD: Raises error
embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed(['my text', 'batch'])

Lỗi này thường xuyên phát sinh khi tải các mô hình ở định dạng TF1 Hub bằng API hub.load() trong TF2. Việc thêm chữ ký chính xác sẽ khắc phục được sự cố này. Xem hướng dẫn di chuyển TF-Hub cho TF2 để biết thêm chi tiết về cách chuyển sang TF2 và cách sử dụng các mô hình ở định dạng TF1 Hub trong TF2.


embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed.signatures['default'](['my text', 'batch'])

Không thể tải xuống mô-đun

Trong quá trình sử dụng mô-đun từ URL, có nhiều lỗi có thể xuất hiện do ngăn xếp mạng. Thông thường đây là sự cố cụ thể đối với máy chạy mã chứ không phải sự cố với thư viện. Dưới đây là danh sách những cái phổ biến:

  • "Đã xảy ra EOF vi phạm giao thức" - Sự cố này có thể xảy ra nếu phiên bản python đã cài đặt không hỗ trợ các yêu cầu TLS của máy chủ lưu trữ mô-đun. Đáng chú ý, python 2.7.5 được biết là không giải quyết được các mô-đun từ miền tfhub.dev. CỐ ĐỊNH : Vui lòng cập nhật lên phiên bản python mới hơn.

  • "không thể xác minh chứng chỉ của tfhub.dev" - Sự cố này có thể xảy ra nếu có thứ gì đó trên mạng đang cố gắng hoạt động như gTLD của nhà phát triển. Trước khi .dev được sử dụng làm gTLD, các nhà phát triển và khung công tác đôi khi sẽ sử dụng tên .dev để giúp kiểm tra mã. Khắc phục: Xác định và cấu hình lại phần mềm chặn phân giải tên trong miền ".dev".

  • Lỗi ghi vào thư mục bộ nhớ đệm /tmp/tfhub_modules (hoặc tương tự): xem Bộ nhớ đệm để biết đó là gì và cách thay đổi vị trí của nó.

Nếu các lỗi và cách khắc phục ở trên không hiệu quả, người ta có thể thử tải xuống một mô-đun theo cách thủ công bằng cách mô phỏng giao thức đính kèm ?tf-hub-format=compressed vào URL để tải xuống tệp nén tar phải được giải nén thủ công vào cục bộ tài liệu. Đường dẫn đến tệp cục bộ sau đó có thể được sử dụng thay vì URL. Đây là một ví dụ nhanh:

# Create a folder for the TF hub module.
$ mkdir /tmp/moduleA
# Download the module, and uncompress it to the destination folder. You might want to do this manually.
$ curl -L "https://tfhub.dev/google/universal-sentence-encoder/2?tf-hub-format=compressed" | tar -zxvC /tmp/moduleA
# Test to make sure it works.
$ python
> import tensorflow_hub as hub
> hub.Module("/tmp/moduleA")

Chạy suy luận trên mô-đun được khởi tạo trước

Nếu bạn đang viết chương trình Python áp dụng một mô-đun nhiều lần trên dữ liệu đầu vào, bạn có thể áp dụng các công thức sau. (Lưu ý: Để phân phát các yêu cầu trong các dịch vụ sản xuất, hãy xem xét Cung cấp TensorFlow hoặc các giải pháp có thể mở rộng, không có Python khác.)

Giả sử mô hình ca sử dụng của bạn là khởi tạocác yêu cầu tiếp theo (ví dụ: Django, Flask, máy chủ HTTP tùy chỉnh, v.v.), bạn có thể thiết lập việc phân phát như sau:

Mô hình đã lưu của TF2

  • Trong phần khởi tạo:
    • Tải mô hình TF2.0.
import tensorflow_hub as hub

embedding_fn = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
  • Ở phần yêu cầu:
    • Sử dụng chức năng nhúng để chạy suy luận.
embedding_fn(["Hello world"])

Lệnh gọi tf.function này được tối ưu hóa cho hiệu suất, xem hướng dẫn về tf.function .

Mô-đun trung tâm TF1

  • Trong phần khởi tạo:
    • Xây dựng biểu đồ với trình giữ chỗ - điểm vào biểu đồ.
    • Khởi tạo phiên.
import tensorflow as tf
import tensorflow_hub as hub

# Create graph and finalize (finalizing optional but recommended).
g = tf.Graph()
with g.as_default():
  # We will be feeding 1D tensors of text into the graph.
  text_input = tf.placeholder(dtype=tf.string, shape=[None])
  embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
  embedded_text = embed(text_input)
  init_op = tf.group([tf.global_variables_initializer(), tf.tables_initializer()])
g.finalize()

# Create session and initialize.
session = tf.Session(graph=g)
session.run(init_op)
  • Ở phần yêu cầu:
    • Sử dụng phiên để cung cấp dữ liệu vào biểu đồ thông qua trình giữ chỗ.
result = session.run(embedded_text, feed_dict={text_input: ["Hello world"]})

Không thể thay đổi dtype của mô hình (ví dụ: float32 thành bfloat16)

SavingModels của TensorFlow (được chia sẻ trên TF Hub hoặc cách khác) chứa các hoạt động hoạt động trên các loại dữ liệu cố định (thường là float32 cho trọng số và kích hoạt trung gian của mạng thần kinh). Những điều này không thể thay đổi sau khi tải SavingModel (nhưng nhà xuất bản mô hình có thể chọn xuất bản các mô hình khác nhau với các loại dữ liệu khác nhau).

Cập nhật phiên bản mẫu

Siêu dữ liệu tài liệu của các phiên bản mô hình có thể được cập nhật. Tuy nhiên, nội dung của phiên bản (tệp mô hình) là không thay đổi. Nếu bạn muốn thay đổi nội dung mô hình, bạn có thể xuất bản phiên bản mới hơn của mô hình. Đó là một cách tốt để mở rộng tài liệu bằng nhật ký thay đổi mô tả những gì đã thay đổi giữa các phiên bản.