Một hướng dẫn chính thức về @tf.function
nói:
Để có được hiệu suất cao nhất và để mô hình của bạn có thể triển khai ở bất cứ đâu, hãy sử dụng tf.feft để tạo biểu đồ ra khỏi chương trình của bạn. Nhờ AutoGraph, một lượng mã Python đáng ngạc nhiên chỉ hoạt động với tf.feft, nhưng vẫn còn những cạm bẫy cần cảnh giác.
Các khuyến nghị và khuyến nghị chính là:
- Đừng dựa vào các tác dụng phụ của Python như đột biến đối tượng hoặc nối thêm danh sách.
- tf.function hoạt động tốt nhất với ops TensorFlow, thay vì opP NumPy hoặc Python nguyên thủy.
- Khi nghi ngờ, sử dụng for x trong thành ngữ y.
Nó chỉ đề cập đến cách thực hiện các @tf.function
chức năng chú thích chứ không phải khi nào sử dụng nó.
Có một heuristic về cách quyết định liệu tôi ít nhất nên cố gắng chú thích một chức năng với tf.function
? Dường như không có lý do gì để không làm điều đó, trừ khi tôi lười biếng loại bỏ các tác dụng phụ hoặc thay đổi một số thứ như range()
-> tf.range()
. Nhưng nếu tôi sẵn sàng làm điều này ...
Có bất kỳ lý do không sử dụng @tf.function
cho tất cả các chức năng?
tf.function
hướng dẫn có nội dung "Trang trí các hàm cấp mô-đun và phương thức của các lớp cấp mô-đun và tránh trang trí các hàm hoặc phương thức cục bộ". Tôi dường như nhớ từ ngữ rõ ràng hơn, như "không trang trí mọi chức năng, sử dụng tf.function
trong các chức năng cấp cao hơn, như vòng lặp đào tạo", nhưng tôi có thể đánh giá sai (hoặc có thể nó đã bị xóa). OTOH, cuộc thảo luận này có đầu vào thú vị từ các nhà phát triển, cuối cùng có vẻ ổn khi sử dụng nó trong bất kỳ chức năng nào cho tenor / vars.
@tf.function
hàm chú thích AFAIK cũng biên dịch các hàm mà chúng tự gọi là biểu đồ. Vì vậy, bạn sẽ chỉ cần chú thích điểm vào mô-đun phù hợp với những gì bạn mô tả. Nhưng nó cũng không ảnh hưởng đến việc chú thích thủ công các chức năng thấp hơn trong ngăn xếp cuộc gọi.
tf.function
được gọi nhiều lần thì nó không thể ngăn chặn "sao chép mã" trong biểu đồ, đó là lý do tại sao việc sử dụng rộng rãi dường như được khuyến khích.
tensorflow0.1
,tensorflow0.2
,tensorflow0.3
,tensorflow0.4
,tensorflow0.5
và như vậy, cũng như một thẻ cho mỗi người trong số cáctf
module và các lớp học sau đó. Ngoài ra, tại sao không thêm một thẻ cho mỗi mô-đun chuẩn của Python và các hàm và lớp của nó?