Hello, so I’m just trying to load up some numerical data with corresponding labels and I’m getting a not implemented error. I’m not sure what’s going on.
First, I made these classes so I could do this in the future not from scratch:
class Train_Set(Dataset):
def __init__(self, file_path):
self.train_df = pd.read_csv(file_path)
self.data_arr = self.train_df.iloc[:,1:].values
self.label_arr = self.train_df.iloc[:,0].values
self.enc_label_arr = pd.get_dummies(self.train_df.iloc[:,0]).values
def get_item(self, index):
sample = torch.Tensor(self.data_arr[index])
enc_label = torch.Tensor(self.enc_label_arr[index])
return (sample, enc_label)
def __len__(self):
return len(self.data_arr)
class Test_Set(Dataset):
def __init__(self, file_path):
self.test_df = pd.read_csv(file_path)
self.data_arr = self.test_df.iloc[:,1:].values
self.label_arr = self.test_df.iloc[:,0].values
self.enc_label_arr = pd.get_dummies(self.test_df.iloc[:,0]).values
def get_item(self, index):
sample = torch.Tensor(self.data_arr[index])
enc_label = torch.Tensor(self.enc_label_arr[index])
return (sample, enc_label)
def __len__(self):
return len(self.data_arr)
When I start tinkering away with this on a notebook, I go through the ropes and everything seems fine, I make a simple feed forward network etc, but when I get to computing the loss, i guess when the actual data is needed, it goes like this:
loss_items = list()
for t in range(epochs):
print(t)
for i, (samples, labels) in enumerate(train_loader):
outputs = model(samples)
loss = loss_function(outputs, labels)
if i%1000 == 0:
loss_items.append(loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
--------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
in ()
4 print(t)
5
----> 6 for i, (samples, labels) in enumerate(train_loader):
7
8 outputs = model(samples)
~/.local/lib/python3.6/site-packages/torch/utils/data/dataloader.py in __next__(self)
312 if self.num_workers == 0: # same-process loading
313 indices = next(self.sample_iter) # may raise StopIteration
–> 314 batch = self.collate_fn([self.dataset[i] for i in indices])
315 if self.pin_memory:
316 batch = pin_memory_batch(batch)
~/.local/lib/python3.6/site-packages/torch/utils/data/dataloader.py in (.0)
312 if self.num_workers == 0: # same-process loading
313 indices = next(self.sample_iter) # may raise StopIteration
–> 314 batch = self.collate_fn([self.dataset[i] for i in indices])
315 if self.pin_memory:
316 batch = pin_memory_batch(batch)
~/.local/lib/python3.6/site-packages/torch/utils/data/dataset.py in __getitem__(self, index)
15
16 def __getitem__(self, index)
:
—> 17 raise NotImplementedError
18
19 def __len__(self)
:
NotImplementedError:
------------------------------------
So I made sure that get_item
was not defined inside of __init__
, but other than that, I’m pretty stumped.