2 votes

Lire un fichier CSV avec des caractéristiques et des étiquettes dans la même ligne dans Tensorflow

J'ai un fichier .csv avec environ 5000 lignes et 3757 colonnes. Les 3751 premières colonnes de chaque ligne sont les caractéristiques et les 6 dernières colonnes sont les étiquettes. Chaque ligne est un ensemble de paires caractéristiques-étiquettes.

J'aimerais savoir s'il existe des fonctions intégrées ou des moyens rapides de le faire :

  1. Analyser les 3751 premières colonnes en tant que caractéristiques (ces colonnes n'ont pas d'en-tête).
  2. Analyser N'IMPORTE QUELLE des 6 dernières colonnes comme étiquettes, ce qui signifie que j'aimerais prendre n'importe laquelle des 6 dernières colonnes comme étiquette pour la formation.

En gros, je veux former un modèle DNN avec 3751 caractéristiques et 1 étiquette et je voudrais que la sortie de la fonction d'analyse syntaxique soit introduite dans la fonction suivante pour la formation :

train_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x": np.array(training_set.data)},
      y=np.array(training_set.target),
      num_epochs=None,
      shuffle=True) 

Je sais que certaines fonctions comme "tf.contrib.learn.datasets.base.load_csv_without_header" peuvent faire des choses similaires mais elles sont déjà dépréciées.

2voto

DocDriven Points 1944

Vous pourriez vous pencher sur tf.data.Dataset Les pipelines d'entrée ( LIEN ). Ce que vous faites essentiellement, c'est que vous pouvez lire un fichier csv, éventuellement le mélanger/mapper d'une manière ou d'une autre et créer un itérateur sur le jeu de données. Chaque fois que vous évaluez iterator.get_next() vous obtenez un nombre de lignes de votre csv qui est égal à la taille du lot. En ce qui concerne la séparation des caractéristiques et des étiquettes, vous pouvez alors simplement accéder à des éléments individuels du lot avec la syntaxe python standard, par ex. features = batch[:-6] et label = batch[-1] et les alimenter à la fonction que vous voulez.

Sur le site de tensorflow, il y a un tutoriel approfondi sur la façon d'utiliser ces pipelines d'entrée ( LIEN ).

0voto

yuonger741 Points 137
train_features_interim = []
  train_labels_interim = []
  with open(train_file) as f:
      csvreader = csv.reader(f)
      for row in csvreader:
          train_features_interim.append(row)  

  train_features_interim = pd.DataFrame(train_features_interim)      
  a = len(train_features_interim.columns)-6
  train_labels_interim = train_features_interim.iloc[:, a:a+1]   #train one label first
  train_features_interim = train_features_interim.iloc[:, :a]
  train_features_numpy = np.asarray(train_features_interim, dtype=np.float32)
  train_labels_numpy = np.asarray(train_labels_interim, dtype=np.float32)

Je l'ai fait fonctionner maintenant. Bien que ce ne soit pas très propre, cela fonctionne. Je peux ajuster la partie "a:a+1" pour décider combien ( ou quelles) colonnes je veux mettre dans train_labels_interim.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X