partition_dataset
Mantenedores costumam responder em até 3 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 72/100
Direção de pesquisa
Leia a lógica de arredondamento em monai/data/utils.py por volta das linhas 1217-1224 onde partition_dataset calcula o tamanho de cada partição, e reproduza o bug com o snippet na issue (ex. partition_dataset(list(range(10)), ratios=[1,1,1]) descarta itens). A correção deve distribuir os itens restantes para as partições mais arredondadas para baixo, e o reporter diz que tem uma correção e testes prontos — comente rapidamente para coordenar antes de começar, já que um PR pode aparecer. Feito: cada item cai em exatamente uma partição para os ratios/lengths reportados, testes existentes em tests for partition_dataset ainda passam, e novos testes cobrem os casos de itens restantes.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Python
- Estrelas
- 8.8k
- Forks
- 1.7k
- Merge médio
- 5d 3h
- PRs com merge (30d)
- 13
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de Project-MONAI/MONAI
-
partition_dataset with ratios leaves some items out of every partitionTalvez já em andamento @mottopanikeiku assumiu há 3 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Project-MONAI/MONAI#9216 ·
Mantenedores costumam responder em até 3 dias
-
FocalLoss mean reduction is multiplied by the number of channels when ignore_index is setTalvez já em andamento @mottopanikeiku assumiu há 3 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Project-MONAI/MONAI#9214 ·
Mantenedores costumam responder em até 3 dias
-
DiNTS: missing graph-break regression test (follow-up to #9145)Talvez já em andamento @nilapate assumiu há 16 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
Project-MONAI/MONAI#9159 ·
Mantenedores costumam responder em até 3 dias
-
ProbMapProducer raises IndexError on numpy 2.x: SlidingPatchWSIDataset emits float locationsTalvez já em andamento @nilapate assumiu há 27 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Project-MONAI/MONAI#9135 · 1 comentário ·
Mantenedores costumam responder em até 3 dias
-
RandGridPatch crashes for documented 0 or None patch_size entriesTalvez já em andamento @Rajioba1 assumiu há 84 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Project-MONAI/MONAI#9046 ·
Mantenedores costumam responder em até 3 dias
Todas as issues de Project-MONAI/MONAI
Issues semelhantes
-
The changelog workflow excludes otelbot but not dependabot, so every Dependabot pull request fails the changelog checkTalvez já em andamento @ocelotl assumiu hoje. Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
open-telemetry/opentelemetry-python#5825 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
cuga-project/cuga-agent#1020 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 70/100
microsoft/playwright#43640 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
stac-utils/stac-fastapi-elasticsearch-opensearch#965 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
Mantenedores costumam responder em até 1 dia