Ako máte un-pásové váhy vo vlastné keras vrstvy?

0

Otázka

Ja by som chcel vytvoriť vlastné keras vrstva (a codebook pre VQVAE model.) Počas školenia, by som chcel mať tf.Variable ktorý sleduje používania každého kód, aby som mohol reštartovať nevyužité kódy. Tak som vytvoril svoje Codebook 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 trieda nájde členských premennej self.code_counter a pridá ich do zoznamu váhy, ktoré sú uložené s vrstva. To tiež očakáva, že self.code_counter byť prítomný pri hmotnosti sú naložené, ktoré nie je prípad, kedy som spustiť v inference režime. Ako môžem robiť to tak, keras nesleduje premennej v mojom vrstvy. Nechcem, aby to trval alebo ak chcete byť súčasťou layers.weights.

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

Najlepšiu odpoveď

1

Podľa dokumenty:

Premenné nastaviť ako atribúty vrstvy sú sledované ako závažia vrstiev (v vrstva.váhy)

Takže otázka je, či môžete použiť tf.zeros samostatne alebo spolu 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 akúkoľvek spätnú väzbu?
AloneTogether

V iných jazykoch

Táto stránka je v iných jazykoch

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