Come dividere un set di dati tensorflow in training, test e validazione in uno script Python?

Oct 20 2020

Su un notebook jupyter con Tensorflow-2.0.0, una divisione del test di convalida del treno di 80-10-10 è stata eseguita in questo modo:

import tensorflow_datasets as tfds
from os import getcwd
splits = tfds.Split.ALL.subsplit(weighted=(80, 10, 10))

filePath = f"{getcwd()}/../tmp2/"
splits, info = tfds.load('fashion_mnist', with_info=True, as_supervised=True, split=splits, data_dir=filePath)

Tuttavia, quando provo a eseguire lo stesso codice localmente ottengo l'errore

AttributeError: type object 'Split' has no attribute 'ALL'

Ho visto che posso creare due set in questo modo:

splits, info = tfds.load('fashion_mnist', with_info=True, as_supervised=True, split=['train[:80]','test[80:90]'], data_dir=filePath)

ma non so come aggiungere un terzo set.

Risposte

FrancescoBoi Oct 21 2020 at 07:55

tfds.Split.ALL.subsplito tfds.Split.TRAIN.subsplitapparentemente sono deprecati e non più supportati.

Alcuni dei set di dati sono già suddivisi tra treno e test. In questo caso ho trovato la seguente soluzione (utilizzando ad esempio il dataset MNIST fashion):

splits, info = tfds.load('fashion_mnist', with_info=True, as_supervised=True,
split=['train+test[:80]','train+test[80:90]', 'train+test[90:]'],
data_dir=filePath)
(train_examples, validation_examples, test_examples) = splits