# Era batches for trainning Keras NN

**URL:** <https://forum.numer.ai/t/era-batches-for-trainning-keras-nn/4050>\
**Category:** Data Science\
**Created:** [September 8, 2021, 12:17pm UTC](https://forum.numer.ai/t/era-batches-for-trainning-keras-nn/4050 "2021-09-08T12:17:15Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![javiermoral](https://avatars.discourse-cdn.com/v4/letter/j/bbe5ce/32.png) [@javiermoral](https://forum.numer.ai/u/javiermoral)\
**Post date:** [September 8, 2021, 12:17pm UTC](https://forum.numer.ai/t/era-batches-for-trainning-keras-nn/4050/1 "2021-09-08T12:17:16Z")

</div>

I am trying to train a NN with era batches using Keras data generators. I am not familiar with data generators but I have found them very easy to understand after a couple of tutorials. Still, I can’t get it to work and I can’t find where I’m going wrong; the class is very simple and has all the methods required for the Keras model to work.

```
class EraDataGenerator(tf.keras.utils.Sequence):
'Generates data for Keras'

def __init__ (self, X, y, shuffle=True):
    'Initialization'
    self.X = X
    self.y = y
    self.dim = len(X.columns)
    self.eras = X.era.unique()
    self.shuffle = shuffle
    
    if self.shuffle == True:
        np.random.shuffle(self.eras)

    self.on_epoch_end()

def __len__ (self):
    'Num of batches per epoch'
    return len(self.eras)

def __getitem__ (self, idx):

    myEras = [idx]
    
    X = self.X.loc[self.X.era.isin(myEras), self.features].values
    y = self.y.loc[self.X.era.isin(myEras), 'target'].values
    
    return X, y

def on_epoch_end(self):
    'Mixes eras order after each epoch'
    if self.shuffle == True:
        np.random.shuffle(self.eras)

```

The error that occurs is as follows:

```
ValueError: Failed to find data adapter that can handle input: <class ' __main__.EraDataGenerator'>, <class 'NoneType'>

```

Has anyone used Data Generators for the same case and managed to implement it without problems?

---

<div class="post-metadata">

**Author:** ![nyuton](https://yyz1.discourse-cdn.com/flex009/user_avatar/forum.numer.ai/nyuton/32/687_2.png) [@nyuton](https://forum.numer.ai/u/nyuton)\
**Post date:** [September 8, 2021, 12:32pm UTC](https://forum.numer.ai/t/era-batches-for-trainning-keras-nn/4050/2 "2021-09-08T12:32:59Z")

</div>

\_\_getitem() should return an X,y tuple

---

<div class="post-metadata">

**Author:** ![javiermoral](https://avatars.discourse-cdn.com/v4/letter/j/bbe5ce/32.png) [@javiermoral](https://forum.numer.ai/u/javiermoral)\
**Post date:** [September 8, 2021, 12:35pm UTC](https://forum.numer.ai/t/era-batches-for-trainning-keras-nn/4050/3 "2021-09-08T12:35:18Z")

</div>

still getting the same error

---

<div class="post-metadata">

**Author:** ![nyuton](https://yyz1.discourse-cdn.com/flex009/user_avatar/forum.numer.ai/nyuton/32/687_2.png) [@nyuton](https://forum.numer.ai/u/nyuton)\
**Post date:** [September 8, 2021, 1:12pm UTC](https://forum.numer.ai/t/era-batches-for-trainning-keras-nn/4050/4 "2021-09-08T13:12:13Z")

</div>

> [@Feature reversing input noise](http://forum.numer.ai/t/feature-reversing-input-noise/1416/17):
>
> 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) // sel…
