如何修复错误 “模块不可调用”

huangapple go评论182阅读模式
英文:

How to fix error "Module is not callable"

问题

你遇到了一个错误,错误信息是 "'module' object is not callable"。这个错误可能是由于模块和类之间的混淆引起的。要解决这个问题,你可以检查以下几点:

  1. 确保导入了正确的库和模块,特别是 pytorchvideopytorch_lightning

  2. 检查 pytorchvideo.data.ucf101pytorchvideo.data.make_clip_sampler 是否被正确使用。可能需要查看这些函数的文档或示例以确保正确的调用方式。

  3. 确保 dataset_root_pathtrain_transformval_transform 变量已经定义并且可用。

  4. 可以尝试在导入模块时使用别名,以避免与类名混淆。例如,使用 import pytorchvideo.data as pvdata,然后在代码中使用 pvdata.ucf101pvdata.make_clip_sampler

请检查这些方面,看看是否可以解决这个错误。如果问题仍然存在,可能需要更多的上下文信息来帮助进一步调试。

英文:

I am getting error "Module is not callable" at the function val_dataloader step. I already saw that this error may be caused by pyhton confusion between module and class, but still I am not able to resolve it.

  1. class UCFDataModule(pytorch_lightning.LightningDataModule):
  2. _CLIP_DURATION = 2 # Duration of sampled clip for each video
  3. _BATCH_SIZE = 8
  4. _NUM_WORKERS = 8 # Number of parallel processes fetching data
  5. def train_dataloader(self):
  6. train_dataset = pytorchvideo.data.ucf101(
  7. data_path = os.path.join(dataset_root_path, "train"),
  8. clip_sampler = pytorchvideo.data.make_clip_sampler("random", self._CLIP_DURATION),
  9. transform = train_transform
  10. )
  11. return torch.utils.data.DataLoader(
  12. train_dataset,
  13. batch_size = self._BATCH_SIZE,
  14. num_workers = self._NUM_WORKERS,
  15. )
  16. def val_dataloader(self):
  17. val_dataset = pytorchvideo.data.ucf101(
  18. data_path = os.path.join(dataset_root_path, "val"),
  19. clip_sampler = pytorchvideo.data.make_clip_sampler("uniform", self._CLIP_DURATION),
  20. decode_audio = False,
  21. transform = val_transform
  22. )
  23. return torch.utils.data.DataLoader(
  24. val_dataset,
  25. batch_size = self._BATCH_SIZE,
  26. num_workers = self._NUM_WORKERS
  27. )
  28. def test_dataloader(self):
  29. test_dataset = pytorchvideo.data.ucf101(
  30. data_path = os.path.join(dataset_root_path, "test"),
  31. clip_sampler = pytorchvideo.data.make_clip_sampler("uniform", self._CLIP_DURATION),
  32. decode_audio = False,
  33. transform = val_transform
  34. )
  35. return torch.utils.data.DataLoader(
  36. test_dataset,
  37. batch_size = self._BATCH_SIZE,
  38. num_workers = self._NUM_WORKERS
  39. )
  1. def train():
  2. classification_module = VideoClassificationLightningModule()
  3. data_module = UCFDataModule()
  4. trainer = pytorch_lightning.Trainer()
  5. trainer.fit(classification_module, data_module)
  6. pdb.set_trace()
  1. train()
  1. INFO:pytorch_lightning.utilities.rank_zero:GPU available: False, used: False
  2. INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores
  3. INFO:pytorch_lightning.utilities.rank_zero:IPU available: False, using: 0 IPUs
  4. INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs
  5. /usr/local/lib/python3.10/dist-packages/pytorch_lightning/loops/utilities.py:70: PossibleUserWarning: `max_epochs` was not set. Setting it to 1000 epochs. To train without an epoch limit, set `max_epochs=-1`.
  6. rank_zero_warn(
  7. WARNING:pytorch_lightning.loggers.tensorboard:Missing logger folder: /content/lightning_logs
  8. INFO:pytorch_lightning.callbacks.model_summary:
  9. | Name | Type | Params
  10. -------------------------------
  11. 0 | model | Net | 31.7 M
  12. -------------------------------
  13. 31.7 M Trainable params
  14. 0 Non-trainable params
  15. 31.7 M Total params
  16. 126.695 Total estimated model params size (MB)
  17. Sanity Checking:
  18. 0/? [00:00<?, ?it/s]
  19. ---------------------------------------------------------------------------
  20. TypeError Traceback (most recent call last)
  21. <ipython-input-15-ff9f91c35b9e> in <cell line: 1>()
  22. ----> 1 train_results = train()
  23. 13 frames
  24. <ipython-input-11-c166a5edf011> in val_dataloader(self)
  25. 22 def val_dataloader(self):
  26. 23
  27. ---> 24 val_dataset = pytorchvideo.data.ucf101(
  28. 25 data_path = os.path.join(dataset_root_path, "val"),
  29. 26 clip_sampler = pytorchvideo.data.make_clip_sampler("uniform", self._CLIP_DURATION),
  30. TypeError: 'module' object is not callable

答案1

得分: 2

ucf101 是一个模块,我认为你想要使用Ucf101类,你可以直接从pytorchvideo.data中使用它,或者你可以从pytorchvideo.data.ucf101中导入它。

因此,你的最终代码将如下所示:

  1. test_dataset = pytorchvideo.data.Ucf101(
  2. data_path = os.path.join(dataset_root_path, "test"),
  3. clip_sampler = pytorchvideo.data.make_clip_sampler(
  4. "uniform", self._CLIP_DURATION
  5. ),
  6. decode_audio = False,
  7. transform = val_transform
  8. )
英文:

ucf101 is a module I think you want to use Ucf101 class you can directly use it from pytorchvideo.data or you can import it from pytorchvideo.data.ucf101.

So your final code will look like this

  1. test_dataset = pytorchvideo.data.Ucf101(
  2. data_path = os.path.join(dataset_root_path, "test"),
  3. clip_sampler = pytorchvideo.data.make_clip_sampler(
  4. "uniform", self._CLIP_DURATION
  5. ),
  6. decode_audio = False,
  7. transform = val_transform
  8. )

huangapple
  • 本文由 发表于 2023年5月21日 18:19:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/76299386.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定