Eu sou novo em Keras e preciso de sua ajuda.
Estou treinando uma rede neural em Keras e minha função de perda é a diferença ao quadrado entre a saída e o valor-alvo da rede.
Eu quero otimizar isso usando a Descida de gradiente. Depois de passar por alguns links na rede, soube que existem 3 tipos de descidas gradientes usadas geralmente:
- Descida do gradiente de amostra única : aqui, o gradiente é calculado a partir de apenas uma amostra a cada iteração -> o gradiente pode ser barulhento.
- Descida do gradiente em lote : aqui, o gradiente é a média dos gradientes calculados em TODAS as amostras no conjunto de dados -> Gradiente é mais geral, mas intratável para grandes conjuntos de dados.
- Descida de gradiente de mini-lote : semelhante ao lote GD. Em vez de usar um conjunto de dados inteiro, apenas algumas das amostras (determinadas por batch_size) são usadas para calcular o gradiente em todas as iterações -> Não são muito barulhentas e tratáveis computacionalmente -> O melhor dos dois mundos.
Questões:
- Eu gostaria de realizar a descida de gradiente de mini-lote em Keras. Como posso fazer isso? Devo usar o otimizador SGD?
Se o SGD for usado, como defino o batch_size? Não parece haver um parâmetro para a função SGD para definir batch_size.
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
Há um parâmetro batch_size no model.fit () no Keras.
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
É o mesmo que o tamanho do lote na descida de gradiente do minilote? Caso contrário, o que significa exatamente treinar em um lote de insumos? Isso significa que 'batch_size' no. de segmentos executados paralelamente e atualizar os pesos do modelo paralelamente?
Se ajudar, aqui está o trecho de código python que escrevi até agora .
fonte
Levando em consideração as considerações teóricas, dado o conjunto de dados da vida real e o tamanho da rede neural moderna típica, normalmente levaria muito tempo para treinar em lotes de tamanho um, e você não terá RAM e / ou GPU suficientes para treinar em todo o conjunto de dados de uma vez só. Portanto, geralmente não é a pergunta "se" o mini-lote deve ser usado, mas "qual o tamanho" dos lotes que você deve usar. O
batch_size
argumento é o número de observações para treinar em uma única etapa, geralmente tamanhos menores funcionam melhor porque têm efeito regularizador. Além disso, muitas vezes as pessoas usam otimizadores mais complicados (por exemplo, Adam, RMSprop) e outros truques de regularização, o que torna a relação entre desempenho do modelo, tamanho do lote, taxa de aprendizado e tempo de computação mais complicada.fonte