tf.kerasAPI (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.Optimizeruygulama bir tanımlamıyor resource_apply_denseyöntemi, ancak vermez özel görünümlü tanımlamak _resource_apply_denseyöntem saplama . Benzer şekilde, hiçbir yöntem resource_apply_sparseveya create_slotsyöntem yoktur , ancak bir _resource_apply_sparseyöntem saplaması ve bir _create_slotsyö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_sparseve _create_slotsyö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.optimizersoptimizasyonların yapmamasıdır.
Dahası, apply_gradientsyöntem tf.keras.optimizers.Optimizeryönteminin çağırdığını_create_slots fark ettim , ancak temel tf.keras.optimizers.Optimizersınıfın bir _create_slotsyö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_slotsyö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_denseyerineresource_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_gradientsek olarak ne zaman geçersiz kılınır_apply_resource_[dense|sparse]?
Düzenle. GitHub'da açılan sorun: # 36449
_resource_apply_denseveya ifadesine her zaman bakabilir _resource_apply_sparseve 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 .