Implement fit_generator( ) in Keras
Here is an example of fit_generator():
model.fit_generator(generator(features, labels, batch_size), samples_per_epoch=50, nb_epoch=10)
Breaking it down:
generator(features, labels, batch_size
): generates batches of samples indefinitely
sample_per_epoch: number of samples you want to train in each epoch
nb_epoch: number of epochs
As you can manually define
nb_epoch , you have to provide codes for
generator . Here is an example:
features is an array of data with shape (100,64,64,3) and
labels is an array of data with shape (100,1). We use data from
labels to train our model.
def generator(features, labels, batch_size):
# Create empty arrays to contain batch of features and labels#
batch_features = np.zeros((batch_size, 64, 64, 3))
batch_labels = np.zeros((batch_size,1))
for i in range(batch_size):
# choose random index in features
batch_features[i] = some_processing(features[index])
batch_labels[i] = labels[index]
yield batch_features, batch_labels
With the generator above, if we define
batch_size = 10 , that means it will randomly taking out 10 samples from
labels to feed into each epoch until an epoch hits 50 sample limit. Then fit_generator() destroys the used data and move on repeating the same process in new epoch.
One great advantage about fit_generator() besides saving memory is user can integrate random augmentation inside the generator, so it will always provide model with new data to train on the fly.
For more information on fit_generator() arguments, refer to Keras website:
Fits the model on data generated batch-by-batch by a Python generator. The generator is run in parallel to the model…keras.io
I hope you found the content is helpful. If so, please hit ❤ to share and I really appreciate any feedback. Until next time!