web-dev-qa-db-fra.com

Diviser le tenseur en ensembles d'entraînement et de test

Disons que j'ai lu dans un fichier texte en utilisant un TextLineReader. Existe-t-il un moyen de diviser cela en trains et en ensembles de tests dans Tensorflow? Quelque chose comme:

def read_my_file_format(filename_queue):
  reader = tf.TextLineReader()
  key, record_string = reader.read(filename_queue)
  raw_features, label = tf.decode_csv(record_string)
  features = some_processing(raw_features)
  features_train, labels_train, features_test, labels_test = tf.train_split(features,
                                                                            labels,
                                                                            frac=.1)
  return features_train, labels_train, features_test, labels_test
12
Luke

Quelque chose comme suivant devrait fonctionner: tf.split_v(tf.random_shuffle(...

9
user1454804

Comme elham l'a mentionné, vous pouvez utiliser scikit-learn pour le faire facilement. scikit-learn est une bibliothèque open source pour l'apprentissage automatique. Il existe des tonnes d'outils pour la préparation des données, y compris le module model_selection , qui gère la comparaison, la validation et le choix des paramètres.

La méthode model_selection.train_test_split() est spécialement conçue pour diviser vos données en trains et ensembles de tests de manière aléatoire et en pourcentage .

X_train, X_test, y_train, y_test = train_test_split(features,
                                                    labels,
                                                    test_size=0.33,
                                                    random_state=42)

test_size Est le pourcentage à réserver pour les tests et random_state Est à l'origine de l'échantillonnage aléatoire.

Je l'utilise généralement pour fournir des ensembles de données de train et de validation et conserver les vraies données de test séparément. Vous pouvez également exécuter train_test_split Deux fois pour le faire également. C'est à dire. divisez les données en (Train + Validation) et Test, puis divisez Train + Validation en deux tenseurs distincts.

12
Jspies
import sklearn.model_selection as sk

X_train, X_test, y_train, y_test = 
sk.train_test_split(features,labels,test_size=0.33, random_state = 42)
3
elham shawky

J'ai réussi à obtenir un bon résultat en utilisant les fonctions de carte et de filtre de l'api tf.data.Dataset. Utilisez simplement la fonction de carte pour sélectionner au hasard les exemples entre le train et les tests. Pour ce faire, vous pouvez, pour chaque exemple, obtenir un échantillon à partir d'une distribution uniforme et vérifier si la valeur de l'échantillon est inférieure à la division de taux.

def split_train_test(parsed_features, train_rate):
    parsed_features['is_train'] = tf.gather(tf.random_uniform([1], maxval=100, dtype=tf.int32) < tf.cast(train_rate * 100, tf.int32), 0)
    return parsed_features

def grab_train_examples(parsed_features):
    return parsed_features['is_train']

def grab_test_examples(parsed_features):
    return ~parsed_features['is_train']
3