Context: Trying to use VGG16 architecture on the Iceberg challenge. Iceberg challenge has 75x75 ‘images’ but AFAIK the vgg16/vgg16_bn in fastai are actually Fully-Conv networks. So hopefully a 75x75 input image should be Ok.
Environment: Just ran git pull
and conda env update
on Amazon p2 instance
Code:
%reload_ext autoreload
%autoreload 2
import torch
from fastai.imports import *
from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *
from PIL import ImageFile
import seaborn as sns
sns.set_style('whitegrid')
colors = plt.get_cmap('tab10').colors
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
path = "/home/akomma/datasets/iceberg/composites/"
! ls {path}
def get_data(sz, bs):
tfms = tfms_from_model(arch, sz, aug_tfms=transforms_top_down, max_zoom=1.00)
data = ImageClassifierData.from_paths(path,
test_name='test',
bs=bs,
tfms=tfms)
return data
arch = vgg16 # vgg16_bn, vgg19, vgg_bn, dn121, dn161, dn169, dn201,
sz = 75
bs = 32
data = get_data(sz, bs)
learn = ConvLearner.pretrained(arch, data, precompute=False)
lr = 1e-2
learn.fit(lr, 5)
Stack Trace:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-b79876ba01d1> in <module>()
10
11 lr = 1e-2
---> 12 learn.fit(lr, 5)
~/lab_kaggle/iceberg/fastai/learner.py in fit(self, lrs, n_cycle, wds, **kwargs)
96 def fit(self, lrs, n_cycle, wds=None, **kwargs):
97 self.sched = None
---> 98 layer_opt = self.get_layer_opt(lrs, wds)
99 self.fit_gen(self.model, self.data, layer_opt, n_cycle, **kwargs)
100
~/lab_kaggle/iceberg/fastai/learner.py in get_layer_opt(self, lrs, wds)
92
93 def get_layer_opt(self, lrs, wds):
---> 94 return LayerOptimizer(self.opt_fn, self.get_layer_groups(), lrs, wds)
95
96 def fit(self, lrs, n_cycle, wds=None, **kwargs):
~/lab_kaggle/iceberg/fastai/layer_optimizer.py in __init__(self, opt_fn, layer_groups, lrs, wds)
15 if len(wds)==1: wds=wds*len(layer_groups)
16 self.layer_groups,self.lrs,self.wds = layer_groups,lrs,wds
---> 17 self.opt = opt_fn(self.opt_params())
18
19 def opt_params(self):
~/lab_kaggle/iceberg/fastai/core.py in <lambda>(*args, **kwargs)
63
64 def SGD_Momentum(momentum):
---> 65 return lambda *args, **kwargs: optim.SGD(*args, momentum=momentum, **kwargs)
66
67 def one_hot(a,c): return np.eye(c)[a]
~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/optim/sgd.py in __init__(self, params, lr, momentum, dampening, weight_decay, nesterov)
54 if nesterov and (momentum <= 0 or dampening != 0):
55 raise ValueError("Nesterov momentum requires a momentum and zero dampening")
---> 56 super(SGD, self).__init__(params, defaults)
57
58 def __setstate__(self, state):
~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/optim/optimizer.py in __init__(self, params, defaults)
40 group_set = set(group['params'])
41 if not param_set.isdisjoint(group_set):
---> 42 raise ValueError("some parameters appear in more than one "
43 "parameter group")
44 param_set.update(group_set)
ValueError: some parameters appear in more than one parameter group
I get the same error ValueError: some parameters appear in more than one parameter group
when running:
- vgg16
- vgg19
- dn121
- dn161
- dn169
- dn201
However, resnets and resnexts and inceptions models do not have this issue.
Also what are differences between resnext101, resnext101_64, resnext_101_32x4d, resnext_101_64x4d
models? Which one to use?