2016-04-06 14 views
0

Ich versuche eine Klasse zu erstellen, um einen Autoencoder für Rapid-Prototyping schnell zu initialisieren und zu trainieren. Eine Sache, die ich gerne tun könnte, ist, die Anzahl der Epochen, für die ich trainiere, schnell anzupassen. Wie auch immer, es scheint, dass egal was ich mache, das Modell jede Schicht für 100 Epochen trainiert! Ich benutze das Tensorflow-Backend.Keras: Falsche Anzahl der Trainings-Epochen

Hier ist der Code von den zwei beleidigenden Methoden.

def pretrain(self, X_train, nb_epoch = 10): 
    data = X_train 
    for ae in self.pretrains:    
     ae.fit(data, data, nb_epoch = nb_epoch) 
     ae.layers[0].output_reconstruction = False 
     ae.compile(optimizer='sgd', loss='mse') 
     data = ae.predict(data) 

......... 

    def fine_train(self, X_train, nb_epoch): 
    weights = [ae.layers[0].get_weights() for ae in self.pretrains] 

    dims = self.dims 
    encoder = containers.Sequential() 
    decoder = containers.Sequential() 

    ## add special input encoder 
    encoder.add(Dense(output_dim = dims[1], input_dim = dims[0], 
     weights = weights[0][0:2], activation = 'linear')) 

    ## add the rest of the encoders 
    for i in range(1, len(dims) - 1): 
     encoder.add(Dense(output_dim = dims[i+1], 
      weights = weights[i][0:2], activation = self.act)) 

    ## add the decoders from the end 

    decoder.add(Dense(output_dim = dims[len(dims) - 2], input_dim = dims[len(dims) - 1], 
     weights = weights[len(dims) - 2][2:4], activation = self.act)) 

    for i in range(len(dims) - 2, 1, -1): 
     decoder.add(Dense(output_dim = dims[i - 1], 
      weights = weights[i-1][2:4], activation = self.act)) 

    ## add the output layer decoder 
    decoder.add(Dense(output_dim = dims[0], 
     weights = weights[0][2:4], activation = 'linear')) 



    masterAE = AutoEncoder(encoder = encoder, decoder = decoder) 
    masterModel = models.Sequential() 
    masterModel.add(masterAE) 
    masterModel.compile(optimizer = 'sgd', loss = 'mse') 
    masterModel.fit(X_train, X_train, nb_epoch = nb_epoch) 
    self.model = masterModel 

Alle Vorschläge zur Behebung des Problems wären willkommen. Mein ursprünglicher Verdacht war, dass es etwas mit Tensorflow zu tun hatte, also versuchte ich, mit dem theano-Backend zu laufen, stieß aber auf das gleiche Problem.

ist ein Link zum vollständigen Programm.

Antwort

0

Nach dem Keras doc, die fit Methode verwendet einen Standardwert von 100 Ausbildungs ​​Epochen (nb_epoch=100):

fit(X, y, batch_size=128, nb_epoch=100, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, show_accuracy=False, class_weight=None, sample_weight=None) 

Ich bin sicher, wie Sie diese Methoden einsetzen, aber im Anschluss an die „Typische Anwendungen“ von der original code , sollten Sie in der Lage sein, etwas wie (die Variable num_epoch wie erforderlich einzustellen):

#Typical usage: 
num_epoch = 10 
ae = JPAutoEncoder(dims) 
ae.pretrain(X_train, nb_epoch = num_epoch) 
ae.train(X_train, nb_epoch = num_epoch) 
ae.predict(X_val) 
Verwandte Themen