timeseriesAI / tsai

Time series Timeseries Deep Learning Machine Learning Python Pytorch fastai | State-of-the-art Deep Learning library for Time Series and Sequences in Pytorch / fastai
https://timeseriesai.github.io/tsai/
Apache License 2.0
5.15k stars 643 forks source link

TypeError: unhashable type: 'numpy.ndarray' #781

Open 645187919 opened 1 year ago

645187919 commented 1 year ago

When I used my own data to run the example of multivariate classification, I reported this error, could you please help me to look at it?

微信截图_20230609161531

`TypeError Traceback (most recent call last)

in 12 13 tfms = [None, [Categorize()]] ---> 14 dsets = TSDatasets(X, y, tfms=tfms, splits=splits, inplace=True) D:\anaconda\lib\site-packages\tsai\data\core.py in __init__(self, X, y, items, sel_vars, sel_steps, tfms, tls, n_inp, dl_type, inplace, **kwargs) 469 self.tfms = _remove_brackets(tfms) 470 lts = [NoTfmLists if t is None else TSTfmdLists if getattr(t, 'vectorized', None) else TfmdLists for t in self.tfms] --> 471 self.tls = L(lt(item, t, **kwargs) for lt,item,t in zip(lts, items, self.tfms)) 472 if len(self.tls) > 0 and len(self.tls[0]) > 0: 473 self.typs = [type(tl.items[0]) if isinstance(tl.items[0], torch.Tensor) else self.typs[i] for i,tl in enumerate(self.tls)] D:\anaconda\lib\site-packages\fastcore\foundation.py in __call__(cls, x, *args, **kwargs) 96 def __call__(cls, x=None, *args, **kwargs): 97 if not args and not kwargs and x is not None and isinstance(x,cls): return x ---> 98 return super().__call__(x, *args, **kwargs) 99 100 # %% ../nbs/02_foundation.ipynb 46 D:\anaconda\lib\site-packages\fastcore\foundation.py in __init__(self, items, use_list, match, *rest) 104 def __init__(self, items=None, *rest, use_list=False, match=None): 105 if (use_list is not None) or not is_array(items): --> 106 items = listify(items, *rest, use_list=use_list, match=match) 107 super().__init__(items) 108 D:\anaconda\lib\site-packages\fastcore\basics.py in listify(o, use_list, match, *rest) 64 elif isinstance(o, list): res = o 65 elif isinstance(o, str) or is_array(o): res = [o] ---> 66 elif is_iter(o): res = list(o) 67 else: res = [o] 68 if match is not None: D:\anaconda\lib\site-packages\tsai\data\core.py in (.0) 469 self.tfms = _remove_brackets(tfms) 470 lts = [NoTfmLists if t is None else TSTfmdLists if getattr(t, 'vectorized', None) else TfmdLists for t in self.tfms] --> 471 self.tls = L(lt(item, t, **kwargs) for lt,item,t in zip(lts, items, self.tfms)) 472 if len(self.tls) > 0 and len(self.tls[0]) > 0: 473 self.typs = [type(tl.items[0]) if isinstance(tl.items[0], torch.Tensor) else self.typs[i] for i,tl in enumerate(self.tls)] D:\anaconda\lib\site-packages\fastcore\foundation.py in __call__(cls, x, *args, **kwargs) 96 def __call__(cls, x=None, *args, **kwargs): 97 if not args and not kwargs and x is not None and isinstance(x,cls): return x ---> 98 return super().__call__(x, *args, **kwargs) 99 100 # %% ../nbs/02_foundation.ipynb 46 D:\anaconda\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) 366 if do_setup: 367 pv(f"Setting up {self.tfms}", verbose) --> 368 self.setup(train_setup=train_setup) 369 370 def _new(self, items, split_idx=None, **kwargs): D:\anaconda\lib\site-packages\fastai\data\core.py in setup(self, train_setup) 387 train_setup:bool=True # Apply `Transform`(s) only on training `DataLoader` 388 ): --> 389 self.tfms.setup(self, train_setup) 390 if len(self) != 0: 391 x = super().__getitem__(0) if self.splits is None else super().__getitem__(self.splits[0])[0] D:\anaconda\lib\site-packages\fastcore\transform.py in setup(self, items, train_setup) 198 tfms = self.fs[:] 199 self.fs.clear() --> 200 for t in tfms: self.add(t,items, train_setup) 201 202 def add(self,ts, items=None, train_setup=False): D:\anaconda\lib\site-packages\fastcore\transform.py in add(self, ts, items, train_setup) 202 def add(self,ts, items=None, train_setup=False): 203 if not is_listy(ts): ts=[ts] --> 204 for t in ts: t.setup(items, train_setup) 205 self.fs+=ts 206 self.fs = self.fs.sorted(key='order') D:\anaconda\lib\site-packages\fastcore\transform.py in setup(self, items, train_setup) 85 def setup(self, items=None, train_setup=False): 86 train_setup = train_setup if self.train_setup is None else self.train_setup ---> 87 return self.setups(getattr(items, 'train', items) if train_setup else items) 88 89 def _call(self, fn, x, split_idx=None, **kwargs): D:\anaconda\lib\site-packages\fastcore\dispatch.py in __call__(self, *args, **kwargs) 118 elif self.inst is not None: f = MethodType(f, self.inst) 119 elif self.owner is not None: f = MethodType(f, self.owner) --> 120 return f(*args, **kwargs) 121 122 def __get__(self, inst, owner): D:\anaconda\lib\site-packages\fastai\data\transforms.py in setups(self, dsets) 254 255 def setups(self, dsets): --> 256 if self.vocab is None and dsets is not None: self.vocab = CategoryMap(dsets, sort=self.sort, add_na=self.add_na) 257 self.c = len(self.vocab) 258 D:\anaconda\lib\site-packages\fastai\data\transforms.py in __init__(self, col, sort, add_na, strict) 230 if not hasattr(col,'unique'): col = L(col, use_list=True) 231 # `o==o` is the generalized definition of non-NaN used by Pandas --> 232 items = L(o for o in col.unique() if o==o) 233 if sort: items = items.sorted() 234 self.items = '#na#' + items if add_na else items D:\anaconda\lib\site-packages\fastcore\foundation.py in unique(self, sort, bidir, start) 164 def enumerate(self): return L(enumerate(self)) 165 def renumerate(self): return L(renumerate(self)) --> 166 def unique(self, sort=False, bidir=False, start=None): return L(uniqueify(self, sort=sort, bidir=bidir, start=start)) 167 def val2idx(self): return val2idx(self) 168 def cycle(self): return cycle(self) D:\anaconda\lib\site-packages\fastcore\basics.py in uniqueify(x, sort, bidir, start) 722 def uniqueify(x, sort=False, bidir=False, start=None): 723 "Unique elements in `x`, optional `sort`, optional return reverse correspondence, optional prepend with elements." --> 724 res = list(dict.fromkeys(x)) 725 if start is not None: res = listify(start)+res 726 if sort: res.sort() TypeError: unhashable type: 'numpy.ndarray' `
oguiza commented 1 year ago

Hi @645187919, Could you post a code snippet that reproduces the issue? You can use fake/ random data.

isZXY commented 1 year ago

I met this same problem when using OliveOil as dataframe. here's the notebook file:

Untitled.ipynb.zip