Je suis nouveau à Keras et j'ai besoin de votre aide.
J'entraîne un réseau neuronal à Keras et ma fonction de perte est la sortie et la valeur cible de la différence nette au noir et blanc.
Je veux optimiser cela en utilisant Gradient Descent. Après avoir parcouru quelques liens sur le net, j'ai appris qu'il existe 3 types de descentes dégradées généralement utilisées:
- Descente de gradient à échantillon unique : Ici, le gradient est calculé à partir d'un seul échantillon à chaque itération -> Le gradient peut être bruyant.
- Descente de gradient par lots : Ici, le gradient est la moyenne des gradients calculés à partir de TOUS les échantillons du jeu de données -> Le gradient est plus général, mais intraitable pour les jeux de données énormes.
- Descente de gradient en mini-lot : similaire au lot GD. Au lieu d'utiliser l'ensemble de données entier, seuls quelques échantillons (déterminés par batch_size) sont utilisés pour calculer le gradient à chaque itération -> Pas très bruyant et traitable par calcul -> Le meilleur des deux mondes.
Des questions:
- Je voudrais effectuer une descente de gradient en mini-lot à Keras. Comment puis-je faire ceci? Dois-je utiliser l'optimiseur SGD?
Si SGD doit être utilisé, comment définir la taille du lot? Il ne semble pas y avoir de paramètre à la fonction SGD pour définir batch_size.
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
Il existe un paramètre batch_size dans model.fit () dans Keras.
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
Est-ce la même que la taille du lot dans Mini-batch Gradient Descent? Sinon, qu'est-ce que cela signifie exactement de s'entraîner sur un lot d'entrées? Cela signifie-t-il que «batch_size» non. de threads s'exécutent en parallèle et mettent à jour les pondérations du modèle en parallèle?
Si cela peut vous aider, voici l'extrait de code python que j'ai écrit jusqu'à présent .