tf.keras
API (TensorFlow sürümü> = 2.0 kullanarak) ile uyumlu bir özel optimizer sınıfı yazmak istediğinizi varsayalım . Uygulamalarda yapılanlara karşı bunu yapmanın belgelenmiş yolu hakkında kafam karıştı.
tf.keras.optimizers.Optimizer
Devletler için belgeler ,
### 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)
Bununla birlikte, mevcut tf.keras.optimizers.Optimizer
uygulama bir tanımlamıyor resource_apply_dense
yöntemi, ancak vermez özel görünümlü tanımlamak _resource_apply_dense
yöntem saplama . Benzer şekilde, hiçbir yöntem resource_apply_sparse
veya create_slots
yöntem yoktur , ancak bir _resource_apply_sparse
yöntem saplaması ve bir _create_slots
yöntem çağrısı vardır .
Resmi olarak tf.keras.optimizers.Optimizer
(kullanarak alt sınıflarından tf.keras.optimizers.Adam
örneğin) vardır _resource_apply_dense
, _resource_apply_sparse
ve _create_slots
yöntemler ve önde gelen çizgi olmadan böyle bir yöntem vardır.
Performansı biraz daha düşük resmî benzer lider-çizgi yöntemi vardır tf.keras.optimizers.Optimizer
(örneğin, alt sınıfları tfa.optimizers.MovingAverage
: TensorFlow Eklentileri dan _resource_apply_dense
, _resource_apply_sparse
, _create_slots
).
Benim için bir başka kafa karıştırıcı nokta, TensorFlow Addons optimizer'larının bazılarının daapply_gradients
yöntemi (örneğin tfa.optimizers.MovingAverage
) geçersiz kılması , tf.keras.optimizers
optimizasyonların yapmamasıdır.
Dahası, apply_gradients
yöntem tf.keras.optimizers.Optimizer
yönteminin çağırdığını_create_slots
fark ettim , ancak temel tf.keras.optimizers.Optimizer
sınıfın bir _create_slots
yöntemi yok. Bu nedenle, eğer bu alt sınıf geçersiz kılmıyorsa, bir optimize edici alt sınıfında bir _create_slots
yöntemin tanımlanması gerektiği görülmektedir apply_gradients
.
Sorular
A alt sınıfını almanın doğru yolu nedir tf.keras.optimizers.Optimizer
? özellikle,
tf.keras.optimizers.Optimizer
Üstte listelenen belgeler, bahsettikleri yöntemlerin (örneğin,_resource_apply_dense
yerineresource_apply_dense
) önde gelen alt çizgi sürümlerini geçersiz kılmak mı anlamına geliyor ? Öyleyse, TensorFlow'un gelecekteki sürümlerinde davranışlarını değiştirmeyen bu özel görünümlü yöntemlerle ilgili herhangi bir API garantisi var mı? Bu yöntemlerin imzaları nelerdir?- Yöntemlere
apply_gradients
ek olarak ne zaman geçersiz kılınır_apply_resource_[dense|sparse]
?
Düzenle. GitHub'da açılan sorun: # 36449
_resource_apply_dense
veya ifadesine her zaman bakabilir _resource_apply_sparse
ve bunların uygulanmış optimize edicilerdeki kullanımlarını görebilirsiniz. Bence, kararlılık garantili genel API olmasa da, bunları kullanmanın oldukça güvenli olduğunu söyleyebilirim. Sadece bu açıdan daha iyi rehberlik sağlamalıdırlar.
get_config
) eklenmesi planlanmış olabilir , ancak bunlar henüz genel dokümanlarda görünmemelidir .