tristandeleu / pytorch-meta

A collection of extensions and data-loaders for few-shot learning & meta-learning in PyTorch
https://tristandeleu.github.io/pytorch-meta/
MIT License
1.97k stars 256 forks source link

Loading Multiple Labels #129

Closed QiyaoWei closed 2 years ago

QiyaoWei commented 3 years ago

Hi all!

My question is as follows---what parts should I change if I want to load two ground truth labels instead of one? A concrete example is in addition to predicting the class of an input image, I also want to predict its attributes, like the paper "Attributes as Operators". I naively changed the label to be size 2 in "getitem", but received the following error. Thanks in advance for your help---

C:\Users\administered\anaconda3\envs\adj\python.exe E:/wqy/milab-fsl/baselines/protonet/train.py --download --train-data qiyao_test --test-data qiyao_test 0%| | 0/10000 [00:01<?, ?it/s] Traceback (most recent call last): File "E:/wqy/milab-fsl/baselines/protonet/train.py", line 258, in for i_train_batch, train_batch in enumerate(pbar, int(global_task_count / args.batch_tasks) + 1): File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\tqdm\std.py", line 1178, in iter for obj in iterable: File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data\dataloader.py", line 517, in next data = self._next_data() File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data\dataloader.py", line 1199, in _next_data return self._process_data(data) File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data\dataloader.py", line 1225, in _process_data data.reraise() File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch_utils.py", line 429, in reraise raise self.exc_type(msg) RuntimeError: Caught RuntimeError in DataLoader worker process 0. Original Traceback (most recent call last): File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\worker.py", line 202, in _worker_loop data = fetcher.fetch(index) File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\fetch.py", line 47, in fetch return self.collate_fn(data) File "E:\wqy\milab-fsl\torchmeta\utils\data\dataloader.py", line 28, in call return self.collate_fn([self.collate_task(task) for task in batch]) File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\collate.py", line 73, in default_collate return {key: default_collate([d[key] for d in batch]) for key in elem} File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\collate.py", line 73, in return {key: default_collate([d[key] for d in batch]) for key in elem} File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\collate.py", line 83, in default_collate return [default_collate(samples) for samples in transposed] File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\collate.py", line 83, in return [default_collate(samples) for samples in transposed] File "C:\Users\administered\anaconda3\envs\adj\lib\site-packages\torch\utils\data_utils\collate.py", line 55, in default_collate return torch.stack(batch, 0, out=out) RuntimeError: stack expects each tensor to be equal size, but got [18, 3, 84, 84] at entry 0 and [25, 3, 84, 84] at entry 1 Process finished with exit code 1

tristandeleu commented 3 years ago

Hi, I'm sorry for the late reply. I kind of see what you are trying to do (get 2 labels instead of 1), but I don't know exactly how this would all work inside a whole few-shot learning setting (where class labels are transformed into integers in [0, 1, 2, 3, 4] for a 5-way classification task for example). Can you give more details about what is the expected behavior you want to see?

QiyaoWei commented 3 years ago

Hi Tristan,

That's all right, don't worry about it. We ended up re-writing the sampling function to achieve that :)