Giả sử tôi muốn viết một lớp tối ưu hóa tùy chỉnh phù hợp với tf.keras
API (sử dụng phiên bản TensorFlow> = 2.0). Tôi bối rối về cách làm tài liệu để làm điều này so với những gì được thực hiện trong việc triển khai.
Các tài liệu cho tf.keras.optimizers.Optimizer
các tiểu bang ,
### Write a customized optimizer.
If you intend to create your own optimization algorithm, simply inherit from
this class and override the following methods:
- resource_apply_dense (update variable given gradient tensor is dense)
- resource_apply_sparse (update variable given gradient tensor is sparse)
- create_slots (if your optimizer algorithm requires additional variables)
Tuy nhiên, hiện nay tf.keras.optimizers.Optimizer
thực hiện không xác định được resource_apply_dense
phương pháp, nhưng nó không định nghĩa một tư nhân tìm kiếm _resource_apply_dense
phương pháp còn sơ khai . Tương tự, không có resource_apply_sparse
hoặc create_slots
phương thức, nhưng có một _resource_apply_sparse
sơ khai phương thức và một _create_slots
lệnh gọi phương thức .
Trong chính thức tf.keras.optimizers.Optimizer
lớp con (sử dụng tf.keras.optimizers.Adam
như một ví dụ), có _resource_apply_dense
, _resource_apply_sparse
và _create_slots
phương pháp, và không có phương pháp như vậy mà không có dấu gạch dưới hàng đầu.
Có nhiều phương pháp tương tự hàng đầu gạch dưới trong hơi ít chính thức tf.keras.optimizers.Optimizer
lớp con (ví dụ, tfa.optimizers.MovingAverage
từ TensorFlow Addons: _resource_apply_dense
, _resource_apply_sparse
, _create_slots
).
Một điểm khó hiểu khác đối với tôi là một số trình tối ưu hóa TensorFlow Addons cũng ghi đè apply_gradients
phương thức (ví dụ tfa.optimizers.MovingAverage
:), trong khi các trình tf.keras.optimizers
tối ưu hóa thì không.
Hơn nữa, tôi nhận thấy rằng apply_gradients
phương tf.keras.optimizers.Optimizer
thức gọi_create_slots
phương thức , nhưng tf.keras.optimizers.Optimizer
lớp cơ sở không có _create_slots
phương thức. Vì vậy, có vẻ như một _create_slots
phương thức phải được xác định trong một lớp con tối ưu hóa nếu lớp con đó không ghi đè apply_gradients
.
Câu hỏi
Cách chính xác để phân lớp a là tf.keras.optimizers.Optimizer
gì? Đặc biệt,
- Có phải
tf.keras.optimizers.Optimizer
tài liệu được liệt kê ở trên chỉ đơn giản là có nghĩa là ghi đè lên các phiên bản gạch dưới hàng đầu của các phương thức mà chúng đề cập (ví dụ:_resource_apply_dense
thay vìresource_apply_dense
)? Nếu vậy, có bất kỳ API nào đảm bảo về các phương thức có vẻ riêng tư này không thay đổi hành vi của chúng trong các phiên bản tương lai của TensorFlow không? Chữ ký của các phương pháp này là gì? - Khi nào thì ghi đè
apply_gradients
ngoài các_apply_resource_[dense|sparse]
phương thức?
Biên tập. Sự cố đã mở trên GitHub: # 36449
_resource_apply_dense
hoặc _resource_apply_sparse
, và xem cách sử dụng chúng trong các trình tối ưu hóa được triển khai. Mặc dù có thể không, tôi nghĩ, API công cộng có đảm bảo độ ổn định, tôi nói rằng nó khá an toàn khi sử dụng chúng. Họ chỉ nên cung cấp hướng dẫn tốt hơn trong khía cạnh này.
get_config
), nhưng sau đó chúng không nên xuất hiện trong tài liệu công khai .