Spaces:
Runtime error
Runtime error
File size: 2,811 Bytes
1cf3825 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import tensorflow as tf
from pathlib import Path
def build_dataset(
directory,
image_size=(224, 224),
batch_size=32,
validation_split=None,
subset=None,
seed=123,
shuffle=True,
):
return tf.keras.preprocessing.image_dataset_from_directory(
directory,
labels='inferred',
label_mode='int',
batch_size=batch_size,
image_size=image_size,
shuffle=shuffle,
validation_split=validation_split,
subset=subset,
seed=seed,
)
def get_datasets(
root_dir,
image_size=(224, 224),
batch_size=32,
validation_split=0.15,
seed=123,
):
root = Path(root_dir)
train_dir = root / 'train'
val_dir = root / 'val'
test_dir = root / 'test'
if not root.exists():
raise FileNotFoundError(f'Dataset root directory not found: {root_dir}')
if val_dir.exists() and test_dir.exists():
train_ds = build_dataset(train_dir, image_size=image_size, batch_size=batch_size, shuffle=True)
val_ds = build_dataset(val_dir, image_size=image_size, batch_size=batch_size, shuffle=False)
test_ds = build_dataset(test_dir, image_size=image_size, batch_size=batch_size, shuffle=False)
elif train_dir.exists():
train_ds = build_dataset(
train_dir,
image_size=image_size,
batch_size=batch_size,
validation_split=validation_split,
subset='training',
seed=seed,
)
val_ds = build_dataset(
train_dir,
image_size=image_size,
batch_size=batch_size,
validation_split=validation_split,
subset='validation',
seed=seed,
shuffle=False,
)
test_ds = None
else:
raise FileNotFoundError(
'Could not find expected train/val/test directories. Create `dataset/train` and optionally `dataset/val` and `dataset/test`.'
)
return train_ds, val_ds, test_ds
def get_augmentation_layer(image_size=(224, 224)):
return tf.keras.Sequential(
[
tf.keras.layers.RandomFlip('horizontal'),
tf.keras.layers.RandomRotation(0.12),
tf.keras.layers.RandomZoom(0.15),
tf.keras.layers.RandomContrast(0.1),
tf.keras.layers.Rescaling(1.0 / 255),
tf.keras.layers.Resizing(image_size[0], image_size[1]),
],
name='data_augmentation',
)
def prepare_dataset(dataset, cache=True, prefetch=True):
if dataset is None:
return None
ds = dataset
if cache:
ds = ds.cache()
if prefetch:
ds = ds.prefetch(buffer_size=tf.data.AUTOTUNE)
return ds
|