Jak mít un-pásové váhy ve vlastní keras vrstva?

0

Otázka

Chtěl bych vytvořit vlastní keras vrstva (číselník pro VQVAE model.) Při tréninku bych chtěl mít tf.Variable který sleduje využití každého kód, takže můžu restartovat nepoužité kódy. Tak jsem vytvořil svůj Číselník vrstva takto...

class Codebook(layers.Layer): 
     def __init__(self, num_codes, code_reset_limit = None, **kwargs): 
         super().__init__(**kwargs) 
         self.num_codes = num_codes 
         self.code_reset_limit = code_reset_limit 
         if self.code_reset_limit: 
             self.code_counter = tf.Variable(tf.zeros(num_codes, dtype = tf.int32), trainable = False) 
     def build(self, input_shape): 
         self.codes = self.add_weight(name = 'codes',  
                                      shape = (self.num_codes, input_shape[-1]), 
                                      initializer = 'random_uniform',  
                                      trainable = True) 
         super().build(input_shape) 
                                                                                                             

Problém mám, je, že Layer třída najde členské proměnné self.code_counter a přidá ji do seznamu závaží, které jsou uloženy s vrstvou. To také očekává, že self.code_counter být přítomen, když váhy jsou načteny což není případ, když jsem běžet v závěru režim. Jak mohu udělat to tak, keras nesleduje proměnné v mém vrstvy. Nechci, aby to přetrvávalo nebo být součástí layers.weights.

keras python tensorflow
2021-11-23 10:45:03
1

Nejlepší odpověď

1

Podle docs:

Proměnné nastavit jako atributy vrstvy jsou sledovány jako závaží v vrstev (vrstvy.závaží)

Takže otázka je, zda můžete použít tf.zeros sám nebo společně s tf.constant:

import tensorflow as tf

class Codebook(tf.keras.layers.Layer): 
     def __init__(self, num_codes, code_reset_limit = None, **kwargs): 
         super().__init__(**kwargs) 
         self.num_codes = num_codes 
         self.code_reset_limit = code_reset_limit 
         if self.code_reset_limit: 
            self.code_counter = tf.constant(tf.zeros(num_codes, dtype = tf.int32))

     def build(self, input_shape): 
         self.codes = self.add_weight(name = 'codes',  
                                      shape = (self.num_codes, input_shape[-1]), 
                                      initializer = 'random_uniform',  
                                      trainable = True) 
         super().build(input_shape) 
code_book = Codebook(num_codes=5, code_reset_limit=True)
print(code_book.weights)
[]
2021-11-23 13:35:05

@chasep255 nějakou zpětnou vazbu?
AloneTogether

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................