2 votes

Comment modifier un réseau de neurones avec Keras pendant la formation ?

Disons que j'ai les éléments suivants dans mon réseau :

x = Conv2D(
            filters=256,
            kernel_size=5,
            strides=2,
            padding="same"
        )(x)
x = Dropout(0.5)(x)
x = BatchNormalization(momentum=0.8)(x)
x = LeakyReLU(alpha=0.2)(x)

Au fait, je travaille avec le backend Tensorflow.

Pendant la formation, je voudrais modifier ou réduire la valeur de la couche Dropout. Et finalement, y a-t-il un moyen de la désactiver ?

1voto

Jonathan DEKHTIAR Points 1832

Je l'ai enfin découvert :

class MyModel():
    def __init__(self, init_dropout, dropout_decay):

        self.init_dropout  = init_dropout
        self.dropout_decay = dropout_decay

        input_layer = Input((64, 64, 1))
        x = Conv2D(
            filters=256,
            kernel_size=5,
            strides=2,
            padding="same"
        )(input_layer)
        x = Dropout(rate=init_dropout)(x)
        x = BatchNormalization(momentum=0.8)(x)
        x = LeakyReLU(alpha=0.2)(x)

        self.model = Model(input_layer, x)

    def decay_dropout(self, epoch, verbose=0):

        rate = max(0, self.init_dropout * (1 / np.exp(self.dropout_decay * epoch))) #define a formula for dropout decay

        for layer in self.model.layers:
            if isinstance(layer, Dropout):

                if (verbose >= 1):
                    print("Decaying Dropout from %.3f to %.3f" % (layer.rate, rate))

                layer.rate = rate

Et puis, bien sûr, la fonction decay_dropout doit être appelée après chaque époque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X