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 .