class DataSequence(tf.keras.utils.Sequence):
def __init__(self, df, features, erasPerBatch=1, shuffle=True):
self.df = df
self.features = features
self.shuffle = shuffle
self.eras = df.era.unique()
if self.shuffle == True:
np.random.shuffle(self.eras)
self.erasPerBatch = erasPerBatch
self.df['target_aux'] = self.df[target]
def __len__(self):
return len(self.eras) // self.erasPerBatch
def on_epoch_end(self):
if self.shuffle == True:
self.df = self.df.sample(frac=1).reset_index(drop=True)
np.random.shuffle(self.eras)
def __getitem__(self, idx):
myEras = []
for i in range(self.erasPerBatch):
myEras.append( self.eras[idx*self.erasPerBatch+i] )
#print(myEras)
X = self.df.loc[self.df.era.isin(myEras), self.features].values
y = self.df.loc[self.df.era.isin(myEras), self.features + ['target_aux', 'target']].values
X = np.split(X, X.shape[1], axis=1)
y = np.split(y, y.shape[1], axis=1)
return X, y
4 Likes