fastai-v2.0.0
I have a DataFrame which looks like this:
Running the following causes the error below.
dls = TextDataLoaders.from_df(df_u, valid_pct=0.33, seed=0, bs=32, num_workers=0, label_delim=' ; ')
Without label_dim worked fine, though I would like to find out what causes the error.
Error:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-338-5521d7276e89> in <module>
----> 1 dls = TextDataLoaders.from_df(df_u, valid_pct=0.33, seed=0, bs=32, num_workers=0, label_delim=' ; ')
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\text\data.py in from_df(cls, df, path, valid_pct, seed, text_col, label_col, label_delim, y_block, text_vocab, is_lm, valid_col, tok_tfm, seq_len, backwards, **kwargs)
245 get_y=None if is_lm else ColReader(label_col, label_delim=label_delim),
246 splitter=splitter)
--> 247 return cls.from_dblock(dblock, df, path=path, seq_len=seq_len, **kwargs)
248
249 @classmethod
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\core.py in from_dblock(cls, dblock, source, path, bs, val_bs, shuffle_train, device, **kwargs)
168 @classmethod
169 def from_dblock(cls, dblock, source, path='.', bs=64, val_bs=None, shuffle_train=True, device=None, **kwargs):
--> 170 return dblock.dataloaders(source, path=path, bs=bs, val_bs=val_bs, shuffle_train=shuffle_train, device=device, **kwargs)
171
172 _docs=dict(__getitem__="Retrieve `DataLoader` at `i` (`0` is training, `1` is validation)",
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\block.py in dataloaders(self, source, path, verbose, **kwargs)
111
112 def dataloaders(self, source, path='.', verbose=False, **kwargs):
--> 113 dsets = self.datasets(source)
114 kwargs = {**self.dls_kwargs, **kwargs, 'verbose': verbose}
115 return dsets.dataloaders(path=path, after_item=self.item_tfms, after_batch=self.batch_tfms, **kwargs)
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\block.py in datasets(self, source, verbose)
108 splits = (self.splitter or RandomSplitter())(items)
109 pv(f"{len(splits)} datasets of sizes {','.join([str(len(s)) for s in splits])}", verbose)
--> 110 return Datasets(items, tfms=self._combine_type_tfms(), splits=splits, dl_type=self.dl_type, n_inp=self.n_inp, verbose=verbose)
111
112 def dataloaders(self, source, path='.', verbose=False, **kwargs):
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\core.py in __init__(self, items, tfms, tls, n_inp, dl_type, **kwargs)
287 def __init__(self, items=None, tfms=None, tls=None, n_inp=None, dl_type=None, **kwargs):
288 super().__init__(dl_type=dl_type)
--> 289 self.tls = L(tls if tls else [TfmdLists(items, t, **kwargs) for t in L(ifnone(tfms,[None]))])
290 self.n_inp = ifnone(n_inp, max(1, len(self.tls)-1))
291
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\core.py in <listcomp>(.0)
287 def __init__(self, items=None, tfms=None, tls=None, n_inp=None, dl_type=None, **kwargs):
288 super().__init__(dl_type=dl_type)
--> 289 self.tls = L(tls if tls else [TfmdLists(items, t, **kwargs) for t in L(ifnone(tfms,[None]))])
290 self.n_inp = ifnone(n_inp, max(1, len(self.tls)-1))
291
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastcore\foundation.py in __call__(cls, x, *args, **kwargs)
45 return x
46
---> 47 res = super().__call__(*((x,) + args), **kwargs)
48 res._newchk = 0
49 return res
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\core.py in __init__(self, items, tfms, use_list, do_setup, split_idx, train_setup, splits, types, verbose, dl_type)
224 if do_setup:
225 pv(f"Setting up {self.tfms}", verbose)
--> 226 self.setup(train_setup=train_setup)
227
228 def _new(self, items, split_idx=None, **kwargs):
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\core.py in setup(self, train_setup)
240
241 def setup(self, train_setup=True):
--> 242 self.tfms.setup(self, train_setup)
243 if len(self) != 0:
244 x = super().__getitem__(0) if self.splits is None else super().__getitem__(self.splits[0])[0]
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastcore\transform.py in setup(self, items, train_setup)
195 tfms = self.fs[:]
196 self.fs.clear()
--> 197 for t in tfms: self.add(t,items, train_setup)
198
199 def add(self,t, items=None, train_setup=False):
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastcore\transform.py in add(self, t, items, train_setup)
198
199 def add(self,t, items=None, train_setup=False):
--> 200 t.setup(items, train_setup)
201 self.fs.append(t)
202
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastcore\transform.py in setup(self, items, train_setup)
76 def setup(self, items=None, train_setup=False):
77 train_setup = train_setup if self.train_setup is None else self.train_setup
---> 78 return self.setups(getattr(items, 'train', items) if train_setup else items)
79
80 def _call(self, fn, x, split_idx=None, **kwargs):
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastcore\dispatch.py in __call__(self, *args, **kwargs)
97 if not f: return args[0]
98 if self.inst is not None: f = MethodType(f, self.inst)
---> 99 return f(*args, **kwargs)
100
101 def __get__(self, inst, owner):
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\transforms.py in setups(self, dsets)
236
237 def setups(self, dsets):
--> 238 if self.vocab is None and dsets is not None: self.vocab = CategoryMap(dsets, sort=self.sort, add_na=self.add_na)
239 self.c = len(self.vocab)
240
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastai\data\transforms.py in __init__(self, col, sort, add_na, strict)
212 if not hasattr(col,'unique'): col = L(col, use_list=True)
213 # `o==o` is the generalized definition of non-NaN used by Pandas
--> 214 items = L(o for o in col.unique() if o==o)
215 if sort: items = items.sorted()
216 self.items = '#na#' + items if add_na else items
~\AppData\Local\Continuum\anaconda3\envs\dev\lib\site-packages\fastcore\foundation.py in unique(self)
393 return self._new(i for i,o in enumerate(self) if f(o))
394
--> 395 def unique(self): return L(dict.fromkeys(self).keys())
396 def enumerate(self): return L(enumerate(self))
397 def val2idx(self): return {v:k for k,v in self.enumerate()}
TypeError: unhashable type: 'list'