2017-05-12 1 views
2

J'ai des questions spécifiques sur la façon de former un réseau de neurones qui est plus grand que ram. Je veux utiliser le standard de facto qui semble être Keras et tensorflow.Plus précisément, comment former le réseau de neurones quand il est plus grand que ram?

  1. Quelles sont les principales catégories et les méthodes que je dois utiliser De Numpy, à scipy, à pandas géants, h5py, à keras afin de ne pas dépasser mes 8 maigres Go de RAM? J'ai le temps de former le modèle; Je n'ai pas d'argent. Mon dataset nécessite 200 Go de RAM.

  2. Dans keras, il existe une méthode model_fit(). Il nécessite des tableaux X et Y numpy. Comment l'obtenir pour accepter des tableaux hdf5 numpy sur disque? Et lors de la spécification de l'architecture du modèle elle-même Comment puis-je sauvegarder le bélier car la mémoire de travail ne nécessite-t-elle pas> 8 Go par moments? En ce qui concerne fit_generator, est-ce que cela accepte les fichiers hdf5? Si la méthode model_fit() peut accepter hdf5, ai-je même besoin d'un générateur d'ajustement? Il semble que vous devez toujours être en mesure d'adapter le modèle entier dans RAM, même avec ces méthodes?

  3. Dans keras, le modèle inclut-il les données d'apprentissage lors du calcul de ses besoins en mémoire? Si oui, je suis en difficulté, je pense.

En substance, je suis en supposant que, à aucun moment je peux dépasser mon 8 Go de RAM, que ce soit d'un codage chaud pour charger le modèle à la formation même sur un petit lot d'échantillons. Je ne suis pas sûr de savoir comment l'accomplir concrètement.

+1

Votre réseau de neurones est donc plus grand que la RAM et vos données d'entraînement sont plus grandes que la RAM? –

+0

Puis-je demander quelles sont vos données? –

Répondre

0

Je ne peux pas tout répondre, et je suis également très intéressé par ces réponses, car je suis également confronté à ce problème de 8 Go.

Je ne peux que suggérer comment passer de petits lots à la fois.

Question 2:

Je ne (ne sais pas vraiment, mais je) pense pas Keras soutiendra en passant le fichier h5py, mais vous pouvez créer une boucle à load the file partially (si le fichier est correctement sauvegardé pour ça).

Vous pouvez créer une boucle externe à:

  • créer un petit tableau avec seulement un ou deux échantillons du fichier
  • utiliser la méthode train_on_batch passant seulement ce petit tableau.
  • libérer la mémoire disposée de la matrice ou remplir ce même tableau avec le (s) échantillon (s) suivant (s).

Question 3:

ne savent pas sur le fichier h5py, est l'objet qui ouvre le fichier d'un générateur de python?

Sinon, vous pouvez créer le generator vous-même.

L'idée est de faire en sorte que le générateur ne charge qu'une partie du fichier et génère de petites grappes de lots avec un ou deux échantillons de données. (Assez semblable à la question 2, mais la boucle passe à l'intérieur d'un générateur.

+0

Depuis, j'ai utilisé pyspark. Les algorithmes sont plus rudimentaires sans toutes les options de réseau de neurones, mais je suis encore au stade où l'algorithme importe moins et où plus de données sont utiles. Personnellement, je n'ai pas vu les cas où l'algorithme est le plus important. – user798719

0

Habituellement, pour de très grands ensembles d'échantillons, une méthode d'entraînement «en ligne» est utilisée. Cela signifie qu'au lieu d'entraîner votre réseau de neurones en une fois avec un lot important, cela permet au réseau de neurones d'être mis à jour de façon incrémentielle à mesure que davantage d'échantillons sont obtenus. Voir: Descente de gradient stochastique