Неизвестный слой: Патчи. Пожалуйста, убедитесь, что этот объект передан в аргументе `custom_objects`.
Неизвестный слой: Патчи. Убедитесь, что этот объект передан в аргументе custom_objects
. Подробности см. в https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object.
Кто-нибудь, пожалуйста? Я передал объект Patches в "custom_object", но получаю снова и снова одну и ту же ошибку.
Слой патчей
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
Второй уровень
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
Передача аргументов слоя
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)