Como dividir um conjunto de dados tensorflow em treinamento, teste e validação em um script Python?

Oct 20 2020

Em um notebook Jupyter com Tensorflow-2.0.0, uma divisão de teste de validação de trem de 80-10-10 foi realizada desta maneira:

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)

No entanto, ao tentar executar o mesmo código localmente, recebo o erro

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

Eu vi que posso criar dois conjuntos desta maneira:

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

mas não sei como posso adicionar um terceiro conjunto.

Respostas

FrancescoBoi Oct 21 2020 at 07:55

tfds.Split.ALL.subsplitou tfds.Split.TRAIN.subsplitaparentemente estão obsoletos e não têm mais suporte.

Alguns dos conjuntos de dados já estão divididos entre trem e teste. Nesse caso, encontrei a seguinte solução (usando, por exemplo, o conjunto de dados fashion MNIST):

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