tensorflow/models · error · ValueError
Class directory is empty
Error message
Class directory is empty: {class_path} What it means
Raised by compute_class_weights when a class subdirectory exists but contains no regular files. Class weights are computed from per-class file counts; a zero count would cause a division by zero when normalizing, so the guard rejects it. Usually means a partially copied/extracted dataset, an empty class folder, or files nested in another subdirectory level that the per-file iterdir count misses.
Solutions
- Ensure every class folder contains at least one image file directly (not nested in further subdirectories)
- Re-download or re-extract the dataset if some class folders were left empty
- Flatten nested structure so images sit directly under their class folder
- Audit the dataset tree with a quick per-class file count before training
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at official/projects/waste_identification_ml/fine_tuning/Dinov3_image_classifier/datasets.py:237 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tensorflow/models@e006f5f0d5 (2026-08-24).
Data as JSON: /api/errors/e35c537282de232d.
Report an issue: GitHub.
Appendix: source
Thrown at official/projects/waste_identification_ml/fine_tuning/Dinov3_image_classifier/datasets.py:237
ValueError: If `train_directory` contains no class subdirectories or if
any class subdirectory contains no files.
"""
class_names = sorted(
entry.name for entry in train_directory.iterdir() if entry.is_dir()
)
if not class_names:
raise ValueError(
f"No class subdirectories found in train_directory: {train_directory}"
)
class_counts = []
for class_name in class_names:
class_path = train_directory / class_name
number_of_files = sum(
1 for entry in class_path.iterdir() if entry.is_file()
)
if number_of_files == 0:
raise ValueError(f"Class directory is empty: {class_path}")
class_counts.append(number_of_files)
number_of_classes = len(class_counts)
total_samples = sum(class_counts)
weights = [
total_samples / (number_of_classes * count) for count in class_counts
]
_LOGGER.info("Class counts: %s", dict(zip(class_names, class_counts)))
_LOGGER.info("Class weights: %s", dict(zip(class_names, weights)))
return torch.tensor(weights, dtype=torch.float32)
View on GitHub (pinned to e006f5f0d5)