Prediction of a scalar with a CNN

I’m not sure if it’s due to the changes in the code after these months but I’m getting errors running the following:

data = ImageDataBunch.from_df("./", df=df2, valid_pct = 0.2, size=224,\
                              ds_tfms=get_transforms(), num_workers=0,)\
.normalize(imagenet_stats).label_from_df(cols=1, label_cls=FloatList)

class MSELossFlat(nn.MSELoss): 
#“Same as `nn.MSELoss`, but flattens input and target.”
    def forward(self, input:Tensor, target:Tensor) -> Rank0Tensor:
        return super().forward(input.view(-1), target.view(-1))

learn = create_cnn(data, models.resnet34)

The Error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-82-f600890a6412> in <module>
      1 
----> 2 learn = create_cnn(data, models.resnet34)
      3 learn.loss = MSELossFlat

d:\Anaconda3\lib\site-packages\fastai\vision\learner.py in create_cnn(data, arch, cut, pretrained, lin_ftrs, ps, custom_head, split_on, bn_final, **learn_kwargs)
     75     head = custom_head or create_head(nf, data.c, lin_ftrs, ps=ps, bn_final=bn_final)
     76     model = nn.Sequential(body, head)
---> 77     learn = Learner(data, model, **learn_kwargs)
     78     learn.split(ifnone(split_on,meta['split']))
     79     if pretrained: learn.freeze()

<string> in __init__(self, data, model, opt_func, loss_func, metrics, true_wd, bn_wd, wd, train_bn, path, model_dir, callback_fns, callbacks, layer_groups)

d:\Anaconda3\lib\site-packages\fastai\basic_train.py in __post_init__(self)
    151         self.path = Path(ifnone(self.path, self.data.path))
    152         (self.path/self.model_dir).mkdir(parents=True, exist_ok=True)
--> 153         self.model = self.model.to(self.data.device)
    154         self.loss_func = ifnone(self.loss_func, self.data.loss_func)
    155         self.metrics=listify(self.metrics)

d:\Anaconda3\lib\site-packages\fastai\data_block.py in __getattr__(self, k)
    586         res = getattr(y, k, None)
    587         if res is not None: return res
--> 588         raise AttributeError(k)
    589 
    590     def __setstate__(self,data:Any): self.__dict__.update(data)

AttributeError: device

I’ve tried adding the following line before create_cnn():

data.device = torch.device('cpu')

And ran the following:

data.device = torch.device('cpu')
learn = create_cnn(data, models.resnet34)
learn.loss = MSELossFlat
learn.fit_one_cycle(4)

But now it gives me a new error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-89-495233eaf2b4> in <module>
----> 1 learn.fit_one_cycle(4)

d:\Anaconda3\lib\site-packages\fastai\train.py in fit_one_cycle(learn, cyc_len, max_lr, moms, div_factor, pct_start, wd, callbacks, tot_epochs, start_epoch)
     20     callbacks.append(OneCycleScheduler(learn, max_lr, moms=moms, div_factor=div_factor, pct_start=pct_start, tot_epochs=tot_epochs, 
     21                                        start_epoch=start_epoch))
---> 22     learn.fit(cyc_len, max_lr, wd=wd, callbacks=callbacks)
     23 
     24 def lr_find(learn:Learner, start_lr:Floats=1e-7, end_lr:Floats=10, num_it:int=100, stop_div:bool=True, wd:float=None):

d:\Anaconda3\lib\site-packages\fastai\basic_train.py in fit(self, epochs, lr, wd, callbacks)
    174         if not getattr(self, 'opt', False): self.create_opt(lr, wd)
    175         else: self.opt.lr,self.opt.wd = lr,wd
--> 176         callbacks = [cb(self) for cb in self.callback_fns] + listify(callbacks)
    177         fit(epochs, self.model, self.loss_func, opt=self.opt, data=self.data, metrics=self.metrics,
    178             callbacks=self.callbacks+callbacks)

d:\Anaconda3\lib\site-packages\fastai\basic_train.py in <listcomp>(.0)
    174         if not getattr(self, 'opt', False): self.create_opt(lr, wd)
    175         else: self.opt.lr,self.opt.wd = lr,wd
--> 176         callbacks = [cb(self) for cb in self.callback_fns] + listify(callbacks)
    177         fit(epochs, self.model, self.loss_func, opt=self.opt, data=self.data, metrics=self.metrics,
    178             callbacks=self.callbacks+callbacks)

d:\Anaconda3\lib\site-packages\fastai\basic_train.py in __init__(self, learn)
    382         super().__init__(learn)
    383         self.opt = self.learn.opt
--> 384         self.train_dl = self.learn.data.train_dl
    385         self.no_val,self.silent = False,False
    386 

d:\Anaconda3\lib\site-packages\fastai\data_block.py in __getattr__(self, k)
    586         res = getattr(y, k, None)
    587         if res is not None: return res
--> 588         raise AttributeError(k)
    589 
    590     def __setstate__(self,data:Any): self.__dict__.update(data)

AttributeError: train_dl

Any ideas? If necessary, I’ll provide a dataset for you to play with to hopefully reproduce this (but it’s getting late for me.)

Also, here are my specs:

Windows 10
Python 3.6
Pytorch 1.0.0
Fastai ver 1.0.45

1 Like