I am trying to migrate my code from PyTorch to fastai. I have the following migrated code:
train_loader = self.init_train_dl(self.df, self.train_subjects)
test_loader = self.init_val_dl(self.df, self.val_subjects)
data = DataLoaders(train_loader, test_loader)
learn = Learner(data, AlexNet3D(4608), loss_func=F.mse_loss, opt_func=Adam, metrics=accuracy)
# learn = Learner(data, Net())
learn.fit_one_cycle(self.cli_args.epochs, self.cli_args.lr)
However, I am getting the exception below. What is causing this and how do I fix it?
epoch train_loss valid_loss accuracy time
Epoch 1/1 : |----------------------------------------| 0.00% [0/135 00:00<?]python-BaseException
Traceback (most recent call last):
File "/home/faird/shared/code/external/envs/miniconda3/mini3/envs/cabinet/lib/python3.9/contextlib.py", line 137, in __exit__
self.gen.throw(typ, value, traceback)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 162, in added_cbs
try: yield
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 264, in fit
self._with_events(self._do_fit, 'fit', CancelFitException, self._end_cleanup)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 199, in _with_events
try: self(f'before_{event_type}'); f()
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 253, in _do_fit
self._with_events(self._do_epoch, 'epoch', CancelEpochException)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 199, in _with_events
try: self(f'before_{event_type}'); f()
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 247, in _do_epoch
self._do_epoch_train()
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 239, in _do_epoch_train
self._with_events(self.all_batches, 'train', CancelTrainException)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 199, in _with_events
try: self(f'before_{event_type}'); f()
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 205, in all_batches
for o in enumerate(self.dl): self.one_batch(*o)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 235, in one_batch
self._with_events(self._do_one_batch, 'batch', CancelBatchException)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 199, in _with_events
try: self(f'before_{event_type}'); f()
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/fastai/learner.py", line 219, in _do_one_batch
self.loss_grad = self.loss_func(self.pred, *self.yb)
File "/home/miran045/reine097/projects/AlexNet_Abrol2021/venv/lib/python3.9/site-packages/torch/nn/functional.py", line 3101, in mse_loss
if not (target.size() == input.size()):
AttributeError: 'list' object has no attribute 'size'
MSE loss function is used for regression problem. Accuracy metrics is oftenly used for classification problems. So, The loss fuction mse and metrics accuracy are incompatible.
Either you're using wrong loss function or wrong metric.
Try updating metric to mse as
Otherwise, Follow the documentation for metrics and loss functions
Metrics: https://docs.fast.ai/metrics.html#mse Loss: https://docs.fast.ai/losses.html