Как совместить перекрестную проверку с конвейером в tensorflow?

#python #image-processing #tensorflow2.0

Вопрос:

Я сделал трубопровод в TensorFlow, что-то вроде:

     from glob import glob
    import random
    IMG_SIZE=224

def make_dataset(path,batch_size):
    def parse_image(filename):
     image= tf.io.read_file(filename)
     image=tf.image.decode_jpeg(image,channels=3)
     image=tf.image.resize(image, [IMG_SIZE,IMG_SIZE])
     image=tf.cast(image, tf.float32) / 255.0
       return image

   def configure_for_performance(ds):
    ds=ds.shuffle(buffer_size=5000)
    ds=ds.batch(batch_size)
    ds=ds.repeat()
    ds=ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
    return ds

classes= os.listdir(path)
filenames=glob(path '/*/*')
random.shuffle(filenames)
labels= [classes.index(name.split('/')[-2])for name in 
filenames]

filenames_ds= tf.data.Dataset.from_tensor_slices(filenames)
images_ds= filenames_ds.map(parse_image, 
num_parallel_calls=tf.data.experimental.AUTOTUNE)
labels_ds= tf.data.Dataset.from_tensor_slices(labels)
ds= tf.data.Dataset.zip((images_ds,labels_ds))
ds= configure_for_performance(ds)

return ds
 

Я хочу провести перекрестную проверку, как я могу это сделать с моим новым набором данных? Я хочу что-то вроде:

      dataset=make_dataset(path,32)



    kfold = KFold(n_splits=num_folds, shuffle=True)
    fold_no = 1
    for train, test in kfold.split(dataset):
    model = Sequential()

    ...... # some Keras layers

    model.complie("sth is here") 
    history = model.fit(train,             
          epochs=3)

  scores = model.evaluate(test, verbose=0)
 

но этот код не работает, и ошибка связана с тем, как набор данных разделяется для обучения и тестирования. как я могу решить эту проблему?