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