Je dirige un morceau de code, train.lua, trouvé ici: https://github.com/karpathy/char-rnn/blob/master/train.lualuajit/lua5.1/lua5.2/numéro de mémoire lua5.3 pour le code RNN
C'est une prédiction de langage caractère sage modèle basé sur les SRNN/LSTM. Cela fonctionnait parfaitement sur OSX avec CPU jusqu'à ce que j'aie essayé d'implémenter un modèle de prédiction par mots. A savoir, le réseau prédit le mot suivant, par opposition à l'alphabet suivant. Le nombre de vocabulaire (résultats possibles) est passé à 13320 et le nombre de paramètres a également augmenté à 39963. Avec Luajit, j'ai reçu un message d'erreur "pas assez de mémoire", et je cherchais une solution. J'ai trouvé la question de la limite de mémoire sur Luajit soulevée ici: https://github.com/karpathy/char-rnn/issues/80
J'ai donc retiré la torche et installé lua lisse. Toutefois, ni LUA51, LUA52 ni LUA53 n'ont fonctionné. J'ai rencontré le même problème de mémoire. Il dit juste "Kill: 9" chaque fois que je cours le code d'entraînement. En particulier, le problème survient lorsque je l'obtiens pour créer des calques cachés T (la longueur de séquence ou les pas de temps), qui partagent les mêmes poids, en utilisant la fonction "model_utils.clone_many_times" dans le fichier util/model_utils.lua. Dans mon cas, la fonction s'exécute au point où elle clone 7 couches cachées, et tue le processus là. J'ai mis le rnn_size et le batch_size à la fois 1. Bien sûr, je veux courir des réseaux beaucoup plus grands, mais le code échoue toujours avec cette petite taille.
Mise à jour: Voici la solution de contournement sur laquelle je travaille.
Le processus de clonage semble quelque peu redondant car il stocke des couches cachées. Peut-être que nous pouvons changer la fonction d'une manière qui ne porte que des activations dans les unités, par opposition aux couches entières, à travers des pas de temps T. Je pense que le seul problème est backprop. Les niveaux d'activation des unités masquées sont reportés par la table, init_state_global
, d'un lot à l'autre. Nous avons donc besoin d'établir une rétropropagation sur plusieurs lots.
À quelle étape s'arrête-t-il exactement? Pouvez-vous expliquer quel appel de fonction ne fonctionne pas? – Fabich
Lua 5.3 utilise moins de mémoire. Essayez-le. – lhf