[Python] problème lors de l'execution du tutoriel "Image classification from scratch" sur le site de keras

Keras

Le problème exposé dans ce sujet a été résolu.

Bonjour, J’essaie de réaliser le tutoriel suivant sur le site de keras.

J’ai téléchargé le code source sur github:

J’en suis à la partie "Two options to preprocess the data", cependant, contrairement à l’auteur qui propose 2 solutions et qui exécute la première, j’aimerais éxecuter la seconde, j’ai donc modifié cette partie du code de la manière suivante:

def make_model(input_shape, num_classes):
    #inputs = keras.Input(shape=input_shape)
    # Image augmentation block
    #x = data_augmentation(inputs)
    augmented_train_ds = train_ds.map(
    lambda x, y: (data_augmentation(x, training=True), y))
    # Entry block
    x = layers.experimental.preprocessing.Rescaling(1.0 / 255)(x)
    x = layers.Conv2D(32, 3, strides=2, padding="same")(x)
    x = layers.BatchNormalization()(x)
    x = layers.Activation("relu")(x)

    x = layers.Conv2D(64, 3, padding="same")(x)
    x = layers.BatchNormalization()(x)
    x = layers.Activation("relu")(x)

    previous_block_activation = x  # Set aside residual

    for size in [128, 256, 512, 728]:
        x = layers.Activation("relu")(x)
        x = layers.SeparableConv2D(size, 3, padding="same")(x)
        x = layers.BatchNormalization()(x)

        x = layers.Activation("relu")(x)
        x = layers.SeparableConv2D(size, 3, padding="same")(x)
        x = layers.BatchNormalization()(x)

        x = layers.MaxPooling2D(3, strides=2, padding="same")(x)

        # Project residual
        residual = layers.Conv2D(size, 1, strides=2, padding="same")(
            previous_block_activation
        )
        x = layers.add([x, residual])  # Add back residual
        previous_block_activation = x  # Set aside next residual

    x = layers.SeparableConv2D(1024, 3, padding="same")(x)
    x = layers.BatchNormalization()(x)
    x = layers.Activation("relu")(x)

    x = layers.GlobalAveragePooling2D()(x)
    if num_classes == 2:
        activation = "sigmoid"
        units = 1
    else:
        activation = "softmax"
        units = num_classes

    x = layers.Dropout(0.5)(x)
    outputs = layers.Dense(units, activation=activation)(x)
    return keras.Model(inputs, outputs)

Mais j’obtiens l’erreur suivante lors du lancement du programme:

x = layers.experimental.preprocessing.Rescaling(1.0 / 255)(x) UnboundLocalError: local variable 'x' referenced before assignment

Je ne suis même pas sûr d’avoir fait le changement correctement, pourriez vous m’expliquer comment passer de l’option 1 à l’option 2 s’il vous plait ?

Merci d’avance pour votre aide :)

Salut,

Le problème avec le code que tu présentes est en effet que tu utilises ligne 8 une variable x que tu n’as pas encore définie (tu as commenté sa définition ligne 4).

Si j’ai bien compris le lien vers le tutoriel que tu donnes (je l’ai simplement survolé), le code source donné n’explore que la première option et non la seconde, il ne suffit donc pas de changer les 3 premières lignes de définition par augmented_train_ds pour passer de l’une à l’autre.

Car comme tout le vois, tout le reste de la fonction dépend de cette variable x et nullement d'augmented_train_ds. Si tu choisis la seconde option, il va donc te falloir élaborer ton propre cheminement pour traiter les données de cette manière avec ce que te permet la bilbiothèque.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte