¿Cómo realizar la validación cruzada de k-fold con tensorflow?

Estoy siguiendo el ejemplo de IRIS de tensorflow .

Mi caso ahora es que tengo todos los datos en un solo archivo CSV, no separados, y quiero aplicar la validación cruzada de k-fold en esos datos.

yo tengo

data_set = tf.contrib.learn.datasets.base.load_csv(filename="mydata.csv", target_dtype=np.int) 

¿Cómo puedo realizar la validación cruzada de k-fold en este conjunto de datos con una neural network multicapa igual que en el ejemplo de IRIS?

    Sé que esta pregunta es antigua, pero en caso de que alguien esté buscando hacer algo similar, amplíe la respuesta de ahmedhosny :

    La nueva API de conjuntos de datos de tensorflow tiene la capacidad de crear objetos de conjuntos de datos usando generadores de Python, por lo que junto con KFold de scikit-learn, una opción puede ser crear un conjunto de datos desde el generador KFold.split ():

     import numpy as np from sklearn.model_selection import LeaveOneOut,KFold import tensorflow as tf import tensorflow.contrib.eager as tfe tf.enable_eager_execution() from sklearn.datasets import load_iris data = load_iris() X=data['data'] y=data['target'] def make_dataset(X_data,y_data,n_splits): def gen(): for train_index, test_index in KFold(n_splits).split(X_data): X_train, X_test = X_data[train_index], X_data[test_index] y_train, y_test = y_data[train_index], y_data[test_index] yield X_train,y_train,X_test,y_test return tf.data.Dataset.from_generator(gen, (tf.float64,tf.float64,tf.float64,tf.float64)) dataset=make_dataset(X,y,10) 

    Luego, se puede recorrer el conjunto de datos en el tensorflow basado en el gráfico o mediante la ejecución impecable. Usando la ejecución impaciente:

     for X_train,y_train,X_test,y_test in tfe.Iterator(dataset): .... 

    Las NN se usan generalmente con grandes conjuntos de datos donde no se usa CV, y son muy caras. En el caso de IRIS (50 muestras para cada especie), probablemente lo necesite … ¿por qué no usar scikit-learn con diferentes semillas aleatorias para dividir su entrenamiento y pruebas?

     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) 

    para k en kfold:

    1. dividir los datos de forma diferente, pasando un valor diferente a “random_state”
    2. aprende la red usando _train
    3. prueba usando _test

    Si no te gusta la semilla aleatoria y quieres una división k-fold más estructurada, puedes usar esto tomado desde aquí .

     from sklearn.model_selection import KFold, cross_val_score X = ["a", "a", "b", "c", "c", "c"] k_fold = KFold(n_splits=3) for train_indices, test_indices in k_fold.split(X): print('Train: %s | test: %s' % (train_indices, test_indices)) Train: [2 3 4 5] | test: [0 1] Train: [0 1 4 5] | test: [2 3] Train: [0 1 2 3] | test: [4 5]