6
votes

Créer `INPUT_FN` à partir d'itérateur

La plupart des tutoriels se concentrent sur le cas où l'ensemble de l'ensemble de données de formation s'intègre en mémoire. Cependant, j'ai un itérateur qui agit comme un flux infini de (caractéristiques, des étiquettes) (les créer à moindre coût à la volée).

Lors de la mise en œuvre du INPUT_FN code> pour tensorflows estimateur , puis-je retourner une instance de l'itérateur comme

for i in range(max_iter):
   learn_op(input_fn())


1 commentaires

J'utilise dataseet.from_generator et dans le générateur I boucle via l'itérateur.


3 Réponses :


3
votes

L'argument de INPUT_FN est utilisé tout au long de la formation, mais la fonction elle-même est appelée une fois. Donc, créer un sophistiqué INPUT_FN qui va au-delà de retourner un tableau constant comme expliqué dans le Tutoriel n'est pas aussi simple.

TENSORFLOW propose deux exemples d'Input_FN Input_FN pour NUMPY et Panda Tableaux, mais ils partent d'un tableau en mémoire, cela ne vous aide donc pas avec votre problème.

Vous pouvez également consulter leur code en suivant les liens ci-dessus, pour voir comment ils implémentent un fichier input_fn non trivial efficace, mais vous pouvez constater qu'il nécessite plus de code que vous souhaitez. .

Si vous êtes prêt à utiliser l'interface de niveau moins élevé de Tensorflow, les choses sont plus simples et plus flexibles. Il y a un Tutoriel qui couvre la plupart des besoins et les solutions proposées sont faciles (-er) à mettre en œuvre .

En particulier, si vous avez déjà un itérateur qui renvoie des données que vous avez décrites dans votre question, à l'aide des espaces réservés (section "L'alimentation" dans le lien précédent) doit être simple.


1 commentaires

J'aurais pensé que l'alimentation d'un réseau d'un itérateur / itérable est le cas d'utilisation standard, pas l'exception.



2
votes

J'ai trouvé une demande de traction qui convertit un générateur sur un INPUT_FN : https://github.com/tensorflow/tensorflow/pull/7045/files

la partie correspondante est xxx


0 commentaires

0
votes
from tensorflow.contrib.learn.python.learn.learn_io import generator_io
import numpy as np

# define generator
def generator():
    for index in range(2):
        yield {'a': np.ones(1) * index,'b': np.ones(1) * index + 32,'label': np.ones(1) * index - 32}

input_fn = generator_io.generator_input_fn(generator, target_key='label', batch_size=2, shuffle=False, num_epochs=1)
features, target = input_fn()
Refer to the test case https://github.com/tensorflow/tensorflow/pull/7045/files

0 commentaires