In the databunch class below we pass in the standard dataloader object.
My question is from where does the dataloader gets the dataset
self.train_dl.dataset?
class DataBunch():
def __init__(self, train_dl, valid_dl, c=None):
self.train_dl,self.valid_dl,self.c = train_dl,valid_dl,c
@property
def train_ds(self): return self.train_dl.dataset # it contains dataset class combining dataloader and dataset
@property
def valid_ds(self): return self.valid_dl.dataset
-
I defined a new method into the Dataset call x_size,y_size to directly get the size using class object
train_ds.x_size,valid_ds.y_size
I can get the size out from this
class Dataset():
def init(self, x, y): self.x,self.y = x,y
def len(self):
print(‘len’)
return len(self.x)def size_x(self): return self.x.size() def size_y(self): return self.y.size() def __getitem__(self, i): #print('i',i) return self.x[i],self.y[i]
but when i invoke it using dataloader object i get an error saying dataset has not attribute size_x
x_train_dl.dataset.x_size # this gives an error saying dataset has no attribute size_X