Неизвестный слой: Патчи. Пожалуйста, убедитесь, что этот объект передан в аргументе `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)

Вернуться на верх