Estou usando Python Keras package
para rede neural. Este é o link . É batch_size
igual ao número de amostras de teste? Da Wikipedia, temos esta informação:
No entanto, em outros casos, a avaliação do gradiente de soma pode exigir avaliações dispendiosas dos gradientes de todas as funções de soma. Quando o conjunto de treinamento é enorme e não existem fórmulas simples, avaliar as somas de gradientes se torna muito caro, porque a avaliação do gradiente requer a avaliação de todos os gradientes das funções summand. Para economizar no custo computacional a cada iteração, a descida estocástica do gradiente mostra um subconjunto de funções summand a cada etapa. Isso é muito eficaz no caso de problemas de aprendizado de máquina em larga escala.
As informações acima estão descrevendo dados de teste? É o mesmo que batch_size
em keras (número de amostras por atualização de gradiente)?
fonte
Respostas:
O tamanho do lote define o número de amostras que serão propagadas pela rede.
Por exemplo, digamos que você tenha 1050 amostras de treinamento e deseje configurar um valor
batch_size
igual a 100. O algoritmo coleta as 100 primeiras amostras (de 1 a 100) do conjunto de dados de treinamento e treina a rede. Em seguida, pega as segundas 100 amostras (de 101 a 200) e treina a rede novamente. Podemos continuar executando esse procedimento até que tenhamos propagado todas as amostras através da rede. Problema pode acontecer com o último conjunto de amostras. Em nosso exemplo, usamos 1050, que não é divisível por 100 sem o restante. A solução mais simples é obter as 50 amostras finais e treinar a rede.Vantagens de usar um tamanho de lote <número de todas as amostras:
Requer menos memória. Como você treina a rede usando menos amostras, o procedimento geral de treinamento exige menos memória. Isso é especialmente importante se você não conseguir caber todo o conjunto de dados na memória da sua máquina.
Normalmente, as redes treinam mais rápido com mini-lotes. Isso ocorre porque atualizamos os pesos após cada propagação. No nosso exemplo, propagamos 11 lotes (10 deles tinham 100 amostras e 1 com 50 amostras) e, após cada um deles, atualizamos os parâmetros da nossa rede. Se usássemos todas as amostras durante a propagação, faríamos apenas 1 atualização para o parâmetro da rede.
Desvantagens do uso de um tamanho de lote <número de todas as amostras:
O estocástico é apenas um minilote com
batch_size
igual a 1. Nesse caso, o gradiente muda de direção ainda mais frequentemente do que um gradiente de minilote.fonte
batch_size=1
. A idéia por trás do aprendizado on-line é que você atualize seu modelo assim que vir o exemplo. Com um tamanho de lote maior, significa que primeiro você está analisando as várias amostras antes de fazer a atualização. Em RNN, o tamanho do lote pode ter significados diferentes. Geralmente, é comum dividir a sequência de treinamento em uma janela de tamanho fixo (como 10 palavras). Nesse caso, incluir 100 dessas janelas durante o treinamento significa que você possuibatch_size=100
.Na terminologia da rede neural:
Exemplo: se você tiver 1000 exemplos de treinamento e seu tamanho de lote for 500, serão necessárias duas iterações para concluir uma época.
FYI: Tamanho do lote de troca versus número de iterações para treinar uma rede neural
fonte
Ao resolver com uma CPU um Problema de Otimização, você aplica Iterativamente um Algoritmo sobre alguns Dados de Entrada. Em cada uma dessas iterações, você geralmente atualiza uma métrica do seu problema executando alguns cálculos nos dados. Agora, quando o tamanho dos seus dados é grande, pode ser necessário um tempo considerável para concluir todas as iterações e consumir muitos recursos. Às vezes, você escolhe aplicar esses cálculos iterativos em uma parte dos dados para economizar tempo e recursos computacionais. Essa parte é o batch_size e o processo é chamado (no Neural Network Lingo) de processamento de dados em lote. Quando você aplica seus cálculos em todos os seus dados, realiza o processamento de dados online. Eu acho que a terminologia vem dos anos 60, e mesmo antes. Alguém se lembra do. arquivos do bat bat? Mas é claro que o conceito encarnado significa um segmento ou parte dos dados a serem usados.
fonte
A documentação para
Keras
sobre o tamanho do lote pode ser encontrado sob afit
função nos Modelos (API funcional) páginaSe você tiver um pequeno conjunto de dados, seria melhor tornar o tamanho do lote igual ao tamanho dos dados de treinamento. Primeiro tente com um pequeno lote e depois aumente para economizar tempo. Como o itdxer mencionou, há uma troca entre precisão e velocidade.
fonte