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.