Como grande deve tamanho do lote e número de épocas ser quando ajustamento de um modelo em Keras?

votos
14

Estou treinando em 970 amostras e validação em 243 amostras.

Como grande deve tamanho do lote e número de épocas ser quando ajustamento de um modelo em Keras para otimizar o val_acc? Existe algum tipo de regra de ouro para usar com base no tamanho da entrada de dados?

Publicado 27/01/2016 em 22:21
fonte usuário
Em outras línguas...                            


6 respostas

votos
17

Desde que você tem um muito pequeno conjunto de dados (~ 1000 amostras), você provavelmente seria seguro utilizar um tamanho de lote de 32, que é bastante normal. Não vai fazer uma enorme diferença para o seu problema a menos que você está treinando em centenas de milhares ou milhões de observações.

Para responder a suas perguntas sobre o tamanho do lote e épocas:

Em geral : o tamanho dos lotes maiores resultam em um progresso mais rápido nos treinos, mas nem sempre convergem tão rápido. Tamanhos de lotes menores treinar mais lento, mas pode convergir mais rapidamente. É definitivamente dependente problema.

Em geral , os modelos melhorar com mais épocas de treinamento, a um ponto. Eles vão começar a planalto do rigor como eles convergem. Tente algo como 50 e número da parcela de épocas (eixo x) vs. precisão (eixo y). Você verá onde os níveis de fora.

Qual é o tipo e / ou a forma dos seus dados? São estas imagens, ou apenas dados tabulares? Este é um detalhe importante.

Respondeu 15/07/2016 em 21:43
fonte usuário

votos
3

Eu uso Keras para executar regressão não-linear em dados de fala. Cada um dos meus arquivos de voz me dá características que são 25000 linhas em um arquivo de texto, com cada linha que contém 257 números reais valorizados. I usar um tamanho de lote de 100, 50 epoch para treinar Sequentialmodelo em Keras com uma camada escondida. Após 50 épocas de treinamento, ele converge muito bem para uma baixa val_loss.

Respondeu 19/07/2016 em 10:46
fonte usuário

votos
2

Eu costumava Keras para executar regressão não linear para a modelagem mix mercado. Eu tenho melhores resultados com um tamanho de lote de 32 e épocas = 100, enquanto a formação de um modelo seqüencial em Keras com 3 camadas escondidas. Geralmente tamanho de lote de 32 ou 25 é bom, com épocas = 100 a menos que você tem grande conjunto de dados. em caso de grande conjunto de dados que você pode ir com o tamanho do lote de 10 com épocas b / w 50 a 100. Novamente os valores acima mencionados têm trabalhado muito bem para mim.

Respondeu 04/07/2017 em 08:20
fonte usuário

votos
4

Grandes respostas acima. Todos deram boas entradas.

Idealmente, esta é a sequência dos tamanhos dos lotes que devem ser usados:

{1, 2, 4, 8, 16} - slow 

{ [32, 64],[ 128, 256] }- Good starters

[32, 64] - CPU

[128, 256] - GPU for more boost
Respondeu 08/09/2018 em 01:45
fonte usuário

votos
0

Épocas é até o seu desejo, dependendo de quando a perda de validação pára de melhorar ainda mais. Isso muito deve ser o tamanho do lote:

#find batch size for training the model
def FindBatchSize(model):
    """#model: model architecture, that is yet to be trained"""
    import os, sys, psutil, gc, tensorflow, keras
    import numpy as np
    from keras import backend as K
    BatchFound= 16

    try:
        total_params= int(model.count_params());    GCPU= "CPU"
        #find whether gpu is available
        try:
            if K.tensorflow_backend._get_available_gpus()== []:
                GCPU= "CPU";    #CPU and Cuda9GPU
            else:
                GCPU= "GPU"
        except:
            from tensorflow.python.client import device_lib;    #Cuda8GPU
            def get_available_gpus():
                local_device_protos= device_lib.list_local_devices()
                return [x.name for x in local_device_protos if x.device_type == 'GPU']
            if "gpu" not in str(get_available_gpus()).lower():
                GCPU= "CPU"
                else:
                    GCPU= "GPU"

        #decide batch size on the basis of GPU availability and model complexity
        if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params <100000):
            BatchFound= 64    
        if (os.cpu_count() <16) and (total_params <50000):
            BatchFound= 64  
        if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params <500000) and (total_params >=100000):
            BatchFound= 32      
        if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params >1000000) and (total_params <10000000):
            BatchFound= 16  
        if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params >=10000000):
            BatchFound= 8       
        if (os.cpu_count() <16) and (total_params >5000000):
            BatchFound= 8    
        if total_params >100000000:
            BatchFound= 1

    except:
        pass
    try:

        #find percentage of memory used
        memoryused= psutil.virtual_memory()
        memoryused= float(str(memoryused).split("percent=")[1].split(",")[0])
        if memoryused >75.0:
            BatchFound= 8
        if memoryused >85.0:
            BatchFound= 4
        if memoryused >90.0:
            BatchFound= 2
        if total_params >100000000:
            BatchFound= 1
            print("Batch Size:  "+ str(BatchFound));    gc.collect()
    except:
        pass

    memoryused= [];    total_params= [];    GCPU= "";
    del memoryused, total_params, GCPU;    gc.collect();    BatchSize= BatchFound
    return BatchSize
Respondeu 20/03/2019 em 16:08
fonte usuário

votos
0

Eu tenho cerca de 40.000 pontos de dados. Eu achei que o uso de maior tamanho do lote melhorou o tempo necessário para treinar o modelo. Eu estou usando o tamanho de lote em 10.000 .. existe alguma desvantagem de usar um tamanho muito grande lote? (Eu estou usando keras)

Respondeu 18/06/2019 em 12:16
fonte usuário

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