Jak zapisać nie do wytropienia wagi użytkownika w warstwie keras?

0

Pytanie

Chciałbym stworzyć własny warstwa keras (kodowa książka dla modelu VQVAE). Podczas treningu chciałbym mieć tf.Variable który monitoruje wykorzystanie każdego kodu, żebym mógł ponownie uruchomić niewykorzystane kody. Dlatego stworzyłem swój warstwa kodowej książki w następujący sposób...

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) 
                                                                                                             

Problem, z którym mam do czynienia, polega na tym, że Layer klasa znajduje zmienną - członek self.code_counter i dodaje go do listy wag, które są zapisywane wraz z warstwą. On oczekuje również, że self.code_counter obecny przy starcie wagi, czego się nie dzieje, gdy pracuję w trybie wyjścia. Jak mogę zrobić tak, aby keras nie sprawdzał zmienną w moim warstwie. Nie chcę, aby to istniała lub była częścią layers.weights.

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

Najlepsza odpowiedź

1

Według dokumentów:

Zmienne zdefiniowane jako atrybuty warstwy, śledzone jako ciężaru warstw (w warstwie.wagi)

Więc pytanie, czy można użyć tf.zeros w pojedynkę lub razem z 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 jakieś opinie?
AloneTogether

W innych językach

Ta strona jest w innych językach

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