PPPW / deep-learning-random-explore

194 stars 34 forks source link

Use pretrainedmodels + fastai in Kaggle kernels #1

Closed saurabh502 closed 5 years ago

saurabh502 commented 5 years ago

Hi ,

When I tried using resnext101 in kaggle kernel

learn = create_cnn(data, resnext101_32x4d, pretrained=False,
                  cut=-2, split_on=lambda m: (m[0][6], m[1]))

I got below error: `--------------------------------------------------------------------------- OSError Traceback (most recent call last)

in () 1 learn = create_cnn(data, resnext101_32x4d, pretrained=False, ----> 2 cut=-2, split_on=lambda m: (m[0][6], m[1])) /opt/conda/lib/python3.6/site-packages/fastai/vision/learner.py in create_cnn(data, arch, cut, pretrained, lin_ftrs, ps, custom_head, split_on, bn_final, **kwargs) 57 head = custom_head or create_head(nf, data.c, lin_ftrs, ps=ps, bn_final=bn_final) 58 model = nn.Sequential(body, head) ---> 59 learn = Learner(data, model, **kwargs) 60 learn.split(ifnone(split_on,meta['split'])) 61 if pretrained: learn.freeze() 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) /opt/conda/lib/python3.6/site-packages/fastai/basic_train.py in __post_init__(self) 144 "Setup path,metrics, callbacks and ensure model directory exists." 145 self.path = Path(ifnone(self.path, self.data.path)) --> 146 (self.path/self.model_dir).mkdir(parents=True, exist_ok=True) 147 self.model = self.model.to(self.data.device) 148 self.loss_func = ifnone(self.loss_func, self.data.loss_func) /opt/conda/lib/python3.6/pathlib.py in mkdir(self, mode, parents, exist_ok) 1244 self._raise_closed() 1245 try: -> 1246 self._accessor.mkdir(self, mode) 1247 except FileNotFoundError: 1248 if not parents or self.parent == self: /opt/conda/lib/python3.6/pathlib.py in wrapped(pathobj, *args) 385 @functools.wraps(strfunc) 386 def wrapped(pathobj, *args): --> 387 return strfunc(str(pathobj), *args) 388 return staticmethod(wrapped) 389 OSError: [Errno 30] Read-only file system: '../input/models'` What is way around of this?
PPPW commented 5 years ago

Hi @saurabh502,

In Kaggle kernel, the "input" folder is read only, so you can set your model folder by:

learn = create_cnn(data, resnext101_32x4d, path='modelpath', pretrained=False,
                   cut=-2, split_on=lambda m: (m[0][6], m[1]))

where "modelpath" can't be "/kaggle/input/". Can you try to see whether it works?

saurabh502 commented 5 years ago

Thank you @PPPW worked for me.