Я хотел бы создать пользовательский слой keras (кодовая книга для модели VQVAE). Во время тренировки я хотел бы иметь tf.Variable
который отслеживает использование каждого кода, чтобы я мог перезапустить неиспользуемые коды. Поэтому я создал свой слой кодовой книги следующим образом...
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)
Проблема, с которой я столкнулся, заключается в том, что Layer
класс находит переменную - член self.code_counter
и добавляет его в список весов, которые сохраняются вместе со слоем. Он также ожидает, что self.code_counter
присутствовать при загрузке весов, чего не происходит, когда я работаю в режиме вывода. Как я могу сделать так, чтобы keras не отслеживал переменную в моем слое. Я не хочу, чтобы это сохранялось или было частью layers.weights
.