Comment avoir de l'onu-suivi de poids dans la coutume keras couche?

0

La question

Je voudrais créer un personnalisé keras couche (un livre de codes pour un VQVAE modèle.) Pendant la formation, je voudrais avoir un tf.Variable les pistes à l'utilisation de chaque code afin que je puisse redémarrer inutilisés codes. J'ai donc créé mon Codebook couche comme suit...

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) 
                                                                                                             

Le problème que j'ai est que l' Layer classe trouve la variable membre self.code_counter et l'ajoute à la liste des poids qui sont enregistrés avec la couche. Il attend également de l' self.code_counter d'être présent lorsque les poids sont chargés qui n'est pas le cas quand je le lance en mode de déduction. Comment puis-je faire keras ne fait pas le suivi d'une variable dans ma couche. Je ne veux pas qu'il a persisté et de faire partie de la layers.weights.

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

La meilleure réponse

1

Selon les docs:

Jeu de Variables comme les attributs d'une couche sont suivis comme le poids des couches (dans la couche.de poids)

Donc, la question est de savoir si vous pouvez utiliser tf.zeros seul ou en collaboration avec 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 des commentaires?
AloneTogether

Dans d'autres langues

Cette page est dans d'autres langues

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