Como definir as etapas batch_size, steps_per epoch e validation

26

Estou começando a aprender CNNs usando Keras. Estou usando o theano backend.

Não entendo como definir valores para:

  • tamanho do batch,
  • etapas por época,
  • validation_steps.

Qual deve ser o valor definido batch_size, etapas por época e etapas de validação se eu tiver 240.000 amostras no conjunto de treinamento e 80.000 no conjunto de testes?

Ermene
fonte
Quais são as suas especificações de hardware? Depende do fato de que geralmente as pessoas usam o tamanho de lote de 32/64, épocas como 10 ~ 15 e, em seguida, é possível calcular etapas por época a partir do exposto acima.
Aditya

Respostas:

28
  • batch_size determina o número de amostras em cada mini lote. Seu máximo é o número de todas as amostras, o que torna a descida do gradiente precisa, a perda diminuirá para o mínimo se a taxa de aprendizado for pequena o suficiente, mas as iterações são mais lentas. Seu mínimo é 1, resultando em descida estocástica do gradiente: Rápida, mas a direção da etapa do gradiente é baseada apenas em um exemplo, a perda pode saltar. batch_size permite ajustar entre os dois extremos: direção precisa do gradiente e iteração rápida. Além disso, o valor máximo para batch_size pode ser limitado se o modelo + conjunto de dados não couber na memória disponível (GPU).
  • steps_per_epoch o número de iterações em lote antes que uma época de treinamento seja considerada concluída. Se você possui um conjunto de treinamento de tamanho fixo, pode ignorá-lo, mas pode ser útil se você tiver um grande conjunto de dados ou se estiver gerando aprimoramentos aleatórios de dados dinamicamente, ou seja, se seu conjunto de treinamento tiver um tamanho infinito (gerado). Se você tiver tempo para analisar todo o conjunto de dados de treinamento, recomendo pular esse parâmetro.
  • validation_steps semelhante a steps_per_epoch, mas no conjunto de dados de validação, em vez dos dados de treinamento. Se você tiver tempo para analisar todo o conjunto de dados de validação, recomendo pular esse parâmetro.
Silpion
fonte
O que você quer dizer com "pulando este parâmetro"? Quando removo o parâmetro que recebo When using data tensors as input to a model, you should specify the steps_per_epoch argument.
Nicolas Raoul
De acordo com a documentação, o parâmetro steps_per_epoch do método fit tem um padrão e, portanto, deve ser opcional: "o padrão None é igual ao número de amostras em seu conjunto de dados dividido pelo tamanho do lote, ou 1 se isso não puder ser determinado." Fonte: keras.io/models/model
Silpion
1

existe uma resposta no Github

  1. model.fit_generator requer que o gerador do conjunto de dados de entrada seja executado infinitamente.
  2. steps_per_epoché usado para gerar o conjunto de dados inteiro uma vez chamando os steps_per_epochtempos do gerador
  3. considerando epochso número de vezes que o modelo é treinado em todo o conjunto de dados.
Hong Cheng
fonte