Unknown layer: Patches. Please ensure this object is passed to the `custom_objects` argument
Unknown layer: Patches. Please ensure this object is passed to the custom_objects
argument. See https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object for details.
Anyone please? I have passed the Patches object to the "custom_object"but getting again and again same error.
Patches Layer
class Patches(layers.Layer): def init(self, patch_size, **kwargs): super(Patches, self).init() self.patch_size = patch_size
def call(self, images):
batch_size = tf.shape(images)[0]
patches = tf.image.extract_patches(
images=images,
sizes=[1, self.patch_size, self.patch_size, 1],
strides=[1, self.patch_size, self.patch_size, 1],
rates=[1, 1, 1, 1],
padding="VALID",
)
patch_dims = patches.shape[-1]
patches = tf.reshape(patches, [batch_size, -1, patch_dims])
return patches
def get_config(self):
config = super(Patches, self).get_config()
config.update({
'patch_size': self.patch_size,
})
return config
Second Layer
class PatchEncoder(layers.Layer): def init(self, num_patches, **kwargs): super(PatchEncoder, self).init() self.num_patches = num_patches self.projection = layers.Dense(units=projection_dim) self.position_embedding = layers.Embedding( input_dim=num_patches, output_dim=projection_dim )
def call(self, patch):
positions = tf.range(start=0, limit=self.num_patches, delta=1)
encoded = self.projection(patch) + self.position_embedding(positions)
return encoded
def get_config(self):
config = super(PatchEncoder, self).get_config()
config.update({
'num_patches': self.num_patches,
})
return config
Layer Passing Arguments
loaded_2 = keras.models.load_model(r"E:\FYPProject\Notebooks\vit.h5", custom_objects={"Patches": Patches, "PatchEncoder":PatchEncoder}) print("Loaded Model With Custome Layers/Objects", loaded_2)