मैं होगा की तरह बनाने के लिए एक कस्टम keras परत (एक codebook के लिए एक VQVAE मॉडल.) जबकि मैं प्रशिक्षण के लिए की तरह होता है tf.Variable
जो पटरियों के उपयोग के प्रत्येक कोड तो मैं पुनः आरंभ कर सकते हैं अप्रयुक्त कोड. तो मैं बनाया मेरी Codebook परत के रूप में इस प्रकार है...
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
.