{"record":{"id":"4832c813987f1423","repo":"tensorflow/models","slug":"no-class-subdirectories-found-in-train-directory","errorCode":null,"errorMessage":"No class subdirectories found in train_directory: {train_directory}","messagePattern":"No class subdirectories found in train_directory: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"official/projects/waste_identification_ml/fine_tuning/Dinov3_image_classifier/datasets.py","lineNumber":226,"sourceCode":"\n  Args:\n      train_directory: Path to the training directory. Expected to contain\n        one subdirectory per class, in PyTorch ImageFolder format.\n\n  Returns:\n      A 1D `torch.Tensor` of dtype `float32` and shape `(number_of_classes,)`\n      containing the class weight for each class, ordered alphabetically by\n      class name.\n\n  Raises:\n      ValueError: If `train_directory` contains no class subdirectories or if\n        any class subdirectory contains no files.\n  \"\"\"\n  class_names = sorted(\n      entry.name for entry in train_directory.iterdir() if entry.is_dir()\n  )\n  if not class_names:\n    raise ValueError(\n        f\"No class subdirectories found in train_directory: {train_directory}\"\n    )\n\n  class_counts = []\n  for class_name in class_names:\n    class_path = train_directory / class_name\n    number_of_files = sum(\n        1 for entry in class_path.iterdir() if entry.is_file()\n    )\n    if number_of_files == 0:\n      raise ValueError(f\"Class directory is empty: {class_path}\")\n    class_counts.append(number_of_files)\n\n  number_of_classes = len(class_counts)\n  total_samples = sum(class_counts)\n  weights = [\n      total_samples / (number_of_classes * count) for count in class_counts\n  ]","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/tensorflow/models/blob/e006f5f0d534913e49c1f1dae87364039fa607e2/official/projects/waste_identification_ml/fine_tuning/Dinov3_image_classifier/datasets.py#L208-L244","documentation":"Raised by compute_class_weights when the training directory contains zero subdirectories. The function builds class weights by iterating immediate child directories of train_directory (PyTorch ImageFolder layout); with no subdirectories there are no classes to weight, so the resulting tensor would be empty and downstream training invalid. Typical causes: pointing at the wrong directory, a flat directory of files with no per-class folders, or a not-yet-populated dataset path.","triggerScenarios":"Thrown at official/projects/waste_identification_ml/fine_tuning/Dinov3_image_classifier/datasets.py:226 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify train_directory points to the dataset root that contains one subdirectory per class (ImageFolder format)","Create per-class subdirectories and move images into them, e.g. train/class_a/*.jpg, train/class_b/*.jpg","Check for path typos, relative-path issues, or unmounted storage that leaves the directory empty","Confirm dataset download/extraction completed before computing class weights"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e006f5f0d534913e49c1f1dae87364039fa607e2","analyzedAt":"2026-08-24T14:09:15.576Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}