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
.