Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

partition_dataset

Ouverte Adaptée aux débutants
#9,220 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 3 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python, pytorch
Domaine
data

Piste de recherche

Lisez la logique d'arrondi dans monai/data/utils.py autour des lignes 1217-1224 où partition_dataset calcule la taille de chaque partition, et reproduisez le bogue avec l'extrait de l'issue (p. ex. partition_dataset(list(range(10)), ratios=[1,1,1]) supprime des éléments). La correction devrait distribuer les éléments restants aux partitions les plus arrondies à la baisse, et le rapporteur dit qu'il a une correction et des tests prêts — commentez rapidement pour coordonner avant de commencer, car une PR peut apparaître. Terminé : chaque élément atterrit dans exactement une partition pour les ratios/lengths rapportés, les tests existants dans tests for partition_dataset passent toujours, et de nouveaux tests couvrent les cas d'éléments restants.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

When partition_dataset(data, ratios=...) splits a list, it computes every partition's size by rounding independently (see monai/data/utils.py, lines 1217–1224 at commit 6920610). If those rounded sizes add up to less than len(data), the extra items end up in no partition, and no warning or error is raised.

With three ratios this affects roughly one length in five: for 0.8/0.1/0.1 it happens for 200 of the lengths from 1 to 1000, and for 1/1/1 it happens for 334 of them. With five equal ratios, as many as two items can disappear. Because partition_dataset_classes applies the same function to each class, it can lose up to one item per class. Splits into two parts are not affected.

I found this by reading the code and then testing it.

from monai.data import partition_dataset

print(partition_dataset(list(range(10)), ratios=[1, 1, 1]))

data = list(range(63)) # e.g. the 63 training cases of MSD Task06_Lung
train, val, test = partition_dataset(data, ratios=[0.8, 0.1, 0.1], shuffle=True, seed=0)
print(len(train), len(val), len(test), "in no split:", sorted(set(data) - set(train + val + test)))

Output on dev (6920610):

[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
50 6 6 in no split: [44]

The same thing occurs for other Decathlon training-set sizes. Examples: 303 cases (Task08_HepaticVessel) and 484 cases (Task01_BrainTumour) with 0.8/0.1/0.1; 63 and 303 cases with 0.7/0.15/0.15; and 32 cases (Task05_Prostate) with five equal ratios, where two cases are lost. In a Decathlon-style pipeline (load_decathlon_datalist → partition_dataset → CacheDataset → DataLoader) with 63 cases, one case is never loaded by the train, validation or test split.

Expected behavior

Each item should land in exactly one partition, as the docstring example shows ([0.6, 0.2, 0.2] on 5 items gives [[1, 2, 3], [4], [5]]). The documentation says drop_last does not apply when ratios are used.

Environment

MONAI 1.6.1rc0+50.g6920610c (dev), PyTorch 2.14.1+cpu, NumPy 2.5.4, Python 3.12.13, Linux.

Additional context

I have a small fix ready. It hands the leftover items to the partitions that were rounded down the most, and splits that already cover every item stay unchanged. It comes with tests, and I can open a PR.

Langage dominant
Python
Étoiles
8.8k
Forks
1.7k
Merge moyen
5 j 3 h
PR mergées (30 j)
13

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Project-MONAI/MONAI

Toutes les issues de Project-MONAI/MONAI

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.