Gostaria de criar um personalizado keras camada (de um livro de códigos para uma VQVAE modelo.) Durante o treinamento, eu gostaria de ter um tf.Variable
que rastreia o uso de cada código para que eu possa reiniciar códigos não utilizados. Então eu criei o meu livro de códigos camada da seguinte forma...
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)
O problema que eu tenho é que o Layer
classe encontra a variável de membro self.code_counter
e adiciona-o à lista de pesos que são salvos com a camada. Ele também espera que o self.code_counter
estar presente quando os pesos são carregados, o que não é o caso, quando eu executar em modo de inferência. Como posso torná-lo tão keras não segue a pista de uma variável na minha camada. Não desejo persistente ou para ser parte do layers.weights
.