Keras: número errado de épocas de treinamento

votos
0

Eu estou tentando construir uma classe para inicializar rapidamente e treinar um autoencoder para prototipagem rápida. Uma coisa que eu gostaria de ser capaz de fazer é ajustar rapidamente o número de épocas que eu treino para. No entanto, parece que não importa o que eu faço, o modelo treina cada camada para 100 épocas! Eu estou usando o backend tensorflow.

Aqui está o código a partir dos dois métodos ofensivos.

    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

Todas as sugestões sobre como corrigir o problema seria apreciada. Minha suspeita inicial era de que era algo a ver com tensorflow, então eu tentei correr com o backend Theano mas encontrou o mesmo problema.

Aqui está um link para o programa completo.

Publicado 06/04/2016 em 02:58
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Após o doc Keras , o fitmétodo usa um padrão de 100 épocas de treinamento ( 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)

Eu sei como você está executando esses métodos, mas seguindo o "uso típico" do código original , você deve ser capaz de executar algo como (ajustando a variável num_epochconforme necessário):

#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)
Respondeu 07/04/2016 em 11:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more